14. Pour faire durer le plaisir!
Extraire seulement les caractères de 5 à 7
Extraire les caractères à partir de 5
Savoir si une condition est vraie ou fausse?
Est-ce que le contenu des valeurs correspond à “2019-01-01”
Connaître la longueur des valeurs d’une colonne
Compter le nombre de mots dans des cellules (séparés par des espaces)
- value.split(" ").length() ou value.split(//).length()
Calcul d’un pourcentage arrondi (ex d’un résultat sur 10)
Transformer un format date en format texte plus lisible
- value.toString(“dd MMMM yyyy”)
La création et manipulation de listes (array) - Diviser le contenu de cellules
Diviser le contenu de cellules en fonction d’un séparateur pour ne conserver que le premier élément
Diviser le contenu d’une cellule pour le réordonner
value.split(“,”).reverse().join(“,”)
value.split(“,”).sort().join(“,”)
Diviser après les 3 premiers caractères et conserver le premier élément
- value.splitByLengths(3)[0]
Diviser selon le type de caractères et retenir le deuxième élément
- value.splitByCharType()[1]
Diviser le contenu d’une cellule sur un terme x et conserver le contenu précédent
Inverser le contenu d’une cellule
Diviser le contenu d’une cellule et inverser l’ordre de présentation en ajoutant une virgule entre les deux
- value.split(’ ‘)[1] + “,” + " " + value.split(’ ’)[0]
OU
- value.match(/(.),(.)/).reverse().join(" ")
Ajouter un zéro pour avoir un nombre de caractères précis
Ajouter un zéro devant le contenu si donne une chaine de 0 à 2 caractères
- “0”[0,2-length(value)] + value
Appliquer des conditions
Fonction if - même chose que dans excel
- if(test, si test est vrai, si test est vrai)
Si la cellule contient x, écrire x, sinon y
if(value.contains(“x”), “x”, “y”)
if(value.contains(“1”), value, null)
Comparer deux colonnes
Identifier si le contenu des cellules d’une colonne est pareil à une autre
- value == cells[‘autre-colonne’].value
Est-ce que le premier caractère de la colonne x est le même que la colonne y
- cells[“colonne1”].value[0] == cells[“colonne2”].value[0]
Comparer le contenu de deux colonnes et modifier les valeurs selon le résultat de la condition
- if(cells[“colonne1”].value == cells[“colonne2”].value, “Pareil”, “Pas pareil”)
Faire des calculs simples (valeurs numériques)
Somme d’une colonne plus une autre
- value + cells[‘Jour du mois’].value
Arrondir le contenu
Reprendre et concaténer le contenu d’une autre colonne
Créer une nouvelle colonne en fusionnant le contenu de deux autres et ajouter du texte
- cells[‘nom’].value + cells[‘nom’].value + “Bonjour!”
Créer une nouvelle colonne avec les trois premiers caractères seulement
cells[‘Symptome’].value[0,3]
Transformer le contenu d’une colonne en concaténant le contenu d’une autre
value + ’ ’ + cells[‘street-type’].value
Remplacer des caractères
Remplacer tout le contenu d’une colonne (ici, vider la colonne)
Remplacer une lettre par une autre
- value.replaceChars(“o”, “a”)
Faire plusieurs remplacements d’un coup
- value.replace(“1”, “un”).replace(“2”, “deux”).replace(“3”, “trois”)
Identifier des cellules qui commencent par… (résultat booléen)
- value.startsWith(“Berri”)
Supprimer un caractère de début ou fin de valeur:
Supprime “S” du début de la cellule
- value.replace(/^S/,"") [regex ^ indique le début d’une cellule]
Supprime “.” à la fin de la cellule
- value.replace(/.$/,"") [regex $ indique la fin d’une cellule]
Extraire seulement une partie d’une date
value.toDate().datePart(“year”)
diff(now(),value,‘weeks’)
LS0tDQp0aXRsZTogIk9wZW5SZWZpbmUiDQphdXRob3I6ICJDYXJvbGluZSBQYXRlbmF1ZGU8L2JyPkJpYmxpb3Row6hxdWUgZGVzIGxldHRyZXMgZXQgc2NpZW5jZXMgaHVtYWluZXMsIFVuaXZlcnNpdMOpIGRlIE1vbnRyw6lhbDwvYnI+Y2Fyb2xpbmUucGF0ZW5hdWRlQHVtb250cmVhbC5jYSINCmRhdGU6ICJgciBTeXMuRGF0ZSgpYCINCm91dHB1dDoNCiAgcm1kZm9ybWF0czo6cm9ib2Jvb2s6DQogICAgc2VsZl9jb250YWluZWQ6IHRydWUNCiAgICBoaWdobGlnaHQ6IGthdGUNCiAgICB0aHVtYm5haWxzOiBmYWxzZQ0KICAgIGxpZ2h0Ym94OiB0cnVlDQogICAgZ2FsbGVyeTogdHJ1ZQ0KICAgIHRvY19kZXB0aDogMg0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICBtYXRoamF4OiBudWxsDQogICAgZGZfcHJpbnQ6IHBhZ2VkDQotLS0NCg0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmxpYnJhcnkoa25pdHIpDQpsaWJyYXJ5KHJtZGZvcm1hdHMpDQoNCiMjIEdsb2JhbCBvcHRpb25zDQpvcHRpb25zKG1heC5wcmludD0iNzUiKQ0Kb3B0c19jaHVuayRzZXQoZWNobz1GQUxTRSwNCgkgICAgICAgICAgICAgY2FjaGU9VFJVRSwNCiAgICAgICAgICAgICAgIHByb21wdD1GQUxTRSwNCiAgICAgICAgICAgICAgIHRpZHk9VFJVRSwNCiAgICAgICAgICAgICAgIGNvbW1lbnQ9TkEsDQogICAgICAgICAgICAgICBtZXNzYWdlPUZBTFNFLA0KICAgICAgICAgICAgICAgd2FybmluZz1GQUxTRSkNCm9wdHNfa25pdCRzZXQod2lkdGg9NzUpDQpgYGANCg0KDQoNCiFbXShpbWFnZXMvT1ItbG9nby5qcGcpIA0KDQo8L2JyPg0KDQoqKioNCg0KDQojIE9iamVjdGlmcw0KDQo8ZGl2IGNsYXNzID0gInJpZ2h0Ij4NCjxpbWcgc3JjPSJpbWFnZXMvT1IxNi5qcGciIHdpZHRoPSIyNTBweCIgLz4NCjwvZGl2Pg0KDQotIENvbXByZW5kcmUgbGUgZm9uY3Rpb25uZW1lbnQgZHUgbG9naWNpZWwuDQotIEltcG9ydGVyIGV0IGV4cGxvcmVyIHVuIGpldSBkZSBkb25uw6llcy4gDQotIE1hbmlwdWxlciBldCB0cmFuc2Zvcm1lciBkZXMgZG9ubsOpZXMuDQotIFMnaW5pdGllciDDoCBsJ3VzYWdlIGR1IGxhbmdhZ2UgR1JFTCBldCBhdXggZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzLg0KPC9icj4NCjwvYnI+DQo8L2JyPg0KPC9icj4NCjwvYnI+DQoNCioqKg0KDQo8L2JyPg0KDQojIDEuIFByw6lsaW1pbmFpcmVzDQojIyBEZXMgZG9ubsOpZXMgYmllbiBvcmRvbm7DqWVzIGNvbW1lbmNlbnQgcGFyIHNvaS1tw6ptZSENCg0KDQotIExlIG5ldHRveWFnZSBkZSBmaWNoaWVycyBkZSBkb25uw6llcyBlc3QgdW5lIHTDomNoZSBzb3V2ZW50IGxvbmd1ZSBldCBlbm51eWV1c2UgbWFpcyBpbmNvbnRvdXJuYWJsZSBhdmFudCB0b3V0ZSBhbmFseXNlIG91IGRpZmZ1c2lvbiBkZSBkb25uw6llcy4NCg0KLSBMJ2FtcGxldXIgZGUgY2V0dGUgdMOiY2hlIGTDqXBlbmRyYSBkZSBsJ8OpdGF0IGRlcyBkb25uw6llcyBldCBkdSB0eXBlIGRlIGxvZ2ljaWVsIHF1aSBzZXJhIGVuc3VpdGUgdXRpbGlzw6kgw6AgZGVzIGZpbnMgZCdhbmFseXNlIG91IGRlIHZpc3VhbGlzYXRpb24gKFIsIFNQU1MsIFN0YXRhLCBUYWJsZWF1LCBBcmNHSVMuLi4pDQoNCjwvYnI+DQoNCiMjIyMgUHJvYmzDqG1lcyBjb3VyYW50cyByZWxhdGlmcyDDoCBsYSBmb3JtZSBldC9vdSBhdSBjb250ZW51IGQndW4gamV1IGRlIGRvbm7DqWVzOg0KDQotIFByb2Jsw6htZXMgZCdlbnTDqnRlcyBldCBkZSBub21zIGRlIHZhcmlhYmxlcy4NCi0gQ2VsbHVsZXMgZnVzaW9ubsOpZXMsIHF1aSBjb250aWVubmVudCBkaWZmw6lyZW50ZXMgaW5mb3JtYXRpb25zLg0KLSBWYXJpYWJsZXMgcXVpIG5lIHNvbnQgcGFzIGNsYWlyZW1lbnQgZMOpZmluaWVzIMOgIGxhIHZlcnRpY2FsZS4NCi0gQ29udGVudSB0ZXh0dWVsIG5vbiBzdHJ1Y3R1csOpLg0KLSBQcm9ibMOobWVzIGRlIGZvcm1hdHMsIGRlICJwZXRpdHMgY2FyYWN0w6hyZXMiIC0+IHPDqXBhcmF0ZXVycy9kw6lsaW1pdGV1cnMgZGUgY29udGVudSBldCBkZSBjb2xvbm5lcywgZ3VpbGxlbWV0cywgZW5jb2RhZ2UgKCcnICB8fCB8ICIiICwgLiA7ICkNCi0gUHLDqXNlbmNlIGRlIGNlbGx1bGVzIHZpZGVzLCBlc3BhY2VzLi4uDQoNCltBIGNhc2Ugc3R1ZHkgaW4gbWVzc3kgZGF0YSBhbmFseXNpczogdGhlIEF1c3RyYWxpYW4gc2FtZS1zZXggbWFycmlhZ2Ugc3VydmV5XShodHRwczovL2Jsb2cucmV2b2x1dGlvbmFuYWx5dGljcy5jb20vMjAxNy8xMi9zZXgtbWFycmlhZ2Utc3VydmV5Lmh0bWwpDQoNCjxjZW50ZXI+DQoNCiFbXShpbWFnZXMvT1I5LmpwZyl7d2lkdGg9NjAlfSAgDQoNCjwvY2VudGVyPg0KDQo8L2JyPg0KDQoqKioNCg0KPC9icj4NCg0KQXZhbnQgZCd1dGlsaXNlciBzZXMgZG9ubsOpZXMgZGFucyBsZSBsb2dpY2llbCBkZSBzb24gY2hvaXgsIGxlIG5ldHRveWFnZSBkZSBzZXMgZG9ubsOpZXMgcGV1dCBkb25jIGluY2x1cmUgZGUgbm9tYnJldXNlcyB0w6JjaGVzIGNvbW1lOg0KDQo8ZGl2IGNsYXNzID0gInJpZ2h0Ij4NCjxpbWcgc3JjPSJpbWFnZXMvYm90dGxlLnBuZyIgd2lkdGg9IjE3NXB4IiAvPg0KPC9kaXY+DQotIE1vZGlmaWVyIGwnZW5jb2RhZ2UuDQotIFN1cHByaW1lciBsZXMgZG91YmxvbnMuDQotIERpdmlzZXIgbGVzIGNlbGx1bGVzIGNvbXBvc8OpZXMgZGUgdmFsZXVycyBtdWx0aXBsZXMuICAgDQotIFJlY29kZXIgbGVzIHZhbGV1cnMgbWFucXVhbnRlcy4NCi0gUmVww6lyZXIgbGVzIGVycmV1cnMgZGUgc2Fpc2llLCBsZXMgdmFsZXVycyBhYmVycmFudGVzLi4uDQotIEZ1c2lvbm5lciBkZXMgZmljaGllcnMuDQotIEZ1c2lvbm5lciBkZXMgY29sb25uZXMuDQotIEFncsOpZ2VyIGRlcyB2YWxldXJzIGRlIHZhcmlhYmxlcy4NCi0gQ3LDqWVyIGRlcyB2YXJpYWJsZXMuDQotIENoYW5nZXIgbGUgZm9ybWF0IGRlcyB2YXJpYWJsZXMuDQotIENoYW5nZXIgbGUgZm9ybWF0IGR1IGZpY2hpZXIuDQotIFRyYW5zZm9ybWVyIGxlcyBjb2xvbm5lcyBlbiByYW5nw6llcyAoZm9ybWF0ICJ3aWRlIiBlbiAibG9uZyIpLg0KDQo8L2JyPg0KDQoqKioNCg0KPC9icj4NCg0KIyAyLiBQb3VycXVvaSBPcGVuUmVmaW5lPw0KDQotIFBsdXNpZXVycyBsYW5nYWdlcyBkZSBwcm9ncmFtbWF0aW9uIGV0IG91dGlscyBkJ2FuYWx5c2Ugb3UgZGUgZ2VzdGlvbiBkZSBkb25uw6llcyBwZXV2ZW50IMOqdHJlIHV0aWxpc8OpcywgbWFpcyBPcGVuUmVmaW5lIGEgw6l0w6kgY3LDqcOpIHNww6ljaWZpcXVlbWVudCBwb3VyIGZhaXJlIGxlIG3DqW5hZ2UhDQoNCi0gUGx1cyBmYWNpbGUgcXVlIFIgZXQgcGx1cyBlZmZpY2FjZSBxdSdFeGNlbC4NCg0KLSBQZXJtZXQgZGUgZmFjaWxlbWVudCBpZGVudGlmaWVyIGV0IGRlIGNvcnJpZ2VyIGVuIGxvdCBkZXMgZG9ubsOpZXMgaW5jb21wbMOodGVzLCBtYW5xdWFudGVzLCBlcnJvbsOpZXMsIGluY29ow6lyZW50ZXMsIG5vbiBwZXJ0aW5lbnRlcywgbWFsIGZvcm1hdMOpZXMsIHF1J2VsbGVzIHNvaWVudCBudW3DqXJpcXVlcyBvdSB0ZXh0dWVsbGVzID0+IHNhdXZlIHRlbXBzIGV0IMOpbmVyZ2llLg0KDQoNCjxjZW50ZXI+ICAgDQoNCjxpbWcgc3JjPSJpbWFnZXMvMTkxOC1BZC04NjAtODYweDU3My5qcGciIHdpZHRoPSI2MCUiLz4NCg0KPC9jZW50ZXI+ICAgDQoNCg0KPC9icj4NCg0KIyMjIEZvbmN0aW9ucyBzcMOpY2lhbGlzw6llcyBwb3VyOg0KDQotICpFeHBsb3Jlciogc2VzIGRvbm7DqWVzIHNvdXMgdG91cyBzZXMgYW5nbGVzIChncsOiY2Ugw6AgZGVzIGZpbHRyZXMsIHRyaXMsIGZhY2V0dGVzLCByZWdyb3VwZW1lbnRzKS4gICANCi0gKk5ldHRveWVyKiA6IHJlcMOpcmVyIGRlcyBlcnJldXJzLCBtb2RpZmllciBsZSBjb250ZW51IGRlcyBjZWxsdWxlcy4uLg0KLSAqVHJhbmZvcm1lciogOiBjaGFuZ2VyIGZvcm1hdHMgZGUgc2VzIHZhcmlhYmxlcywgY3LDqWVyIGRlIG5vdXZlbGxlcyB2YXJpYWJsZXMgc3VyIGxhIGJhc2UgZGVzIGNvbG9ubmVzIHByw6lzZW50ZXMuLi4NCi0gKkVucmljaGlyKiA6IGZ1c2lvbm5lciBkZXMgZmljaGllcnMsIGltcG9ydGVyIGRlcyBkb25uw6llcyBlbiBsaWduZSAoQVBJLCBVUkxzKSwgcsOpY29uY2lsaWF0aW9uIChXaWtpZGF0YSBldCBbYXV0cmVzIHNvdXJjZXMgZXh0ZXJuZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9PcGVuUmVmaW5lL09wZW5SZWZpbmUvd2lraS9SZWNvbmNpbGFibGUtRGF0YS1Tb3VyY2VzKSkuLi4NCi0gKkF1dG9tYXRpc2VyKiAocsOpdXRpbGlzZXIgc29uIGhpc3RvcmlxdWUgZGUgbWFuaXB1bGF0aW9ucykNCg0KPC9icj4NCg0KKioqDQoNCjwvYnI+DQoNCiMjIDIuMS4gRXhlbXBsZXMgZCd1dGlsaXNhdGlvbg0KDQpIYXJtb25pc2VyLCBzdGFuZGFyZGlzZXIsIHVuaWZvcm1pc2VyLi4uDQoNCjxjZW50ZXI+ICANCg0KIVtdKGltYWdlcy9PUjguanBnKSAgIA0KDQo8L2NlbnRlcj4gIA0KDQo8L2JyPg0KDQoqKioNCg0KPC9icj4NCg0KIyMgMi4yLiBQb3VyIGF2b2lyIGRlIGJlbGxlcyBkb25uw6llcyAqdGlkeSoNCg0KUGVybWV0IGQnYXBwbGlxdWVyIGxlcyBwcmluY2lwZXMgZHUgW1RpZHlkYXRhXShodHRwczovL3I0ZHMuaGFkLmNvLm56L3RpZHktZGF0YS5odG1sKSANCg0KPiDigJxUaWR5IGRhdGFzZXRzIGFyZSBhbGwgYWxpa2UsIGJ1dCBldmVyeSBtZXNzeSBkYXRhc2V0IGlzIG1lc3N5IGluIGl0cyBvd24gd2F5LuKAnSDigJPigJMgSGFkbGV5IFdpY2toYW0NCg0KPC9icj4NCg0KKipUcm9pcyBwcmluY2lwZXMgZGUgYmFzZToqKg0KDQoxLiBDaGFxdWUgY29sb25uZSBlc3QgdW5lICoqdmFyaWFibGUqKi4NCjIuIENoYXF1ZSBsaWduZSBlc3QgdW5lICoqb2JzZXJ2YXRpb24qKi4NCjMuIENoYXF1ZSBjZWxsdWxlIMOgICoqdW5lIHNldWxlIHZhbGV1cioqLg0KDQo8Y2VudGVyPiAgDQoNCiFbXShpbWFnZXMvT1IxMC5qcGcpIA0KDQo8L2NlbnRlcj4gIA0KDQo8L2JyPg0KDQoqKioNCg0KPC9icj4NCg0KIyMgMi4zLiAgUHJpbmNpcGFsZXMgY2FyYWN0w6lyaXN0aXF1ZXMNCg0KLSBMb2dpY2llbCBncmF0dWl0IGV0IG91dmVydCB1dGlsaXPDqSBwYXIgdW5lIGxhcmdlIGNvbW11bmF1dMOpLg0KDQotIENyw6nDqSBlbiAyMDEwICgqRnJlZWJhc2UgR3JpZHdvcmtzKiksIHJhY2hldMOpIHBhciBHb29nbGUgZW4gMjAxMCAoKkdvb2dsZSBSZWZpbmUqKSwgcHVpcyBvdXZlcnR1cmUgZHUgY29kZSBlbiAyMDEyIGV0IHJlcHJpcyBwYXIgY29tbXVuYXV0w6kgcXVpIGxlIGTDqXBsYWNlIHN1ciBHaXRodWIgZXQgZGV2aWVudCAqT3BlblJlZmluZSouDQoNCi0gTXVsdGlwbGF0ZWZvcm1lczogV2luZG93cywgTWFjLCBMaW51eC4NCg0KLSBJbnRlcmZhY2Ugc2VtYmxhYmxlIMOgIHVuIHRhYmxldXIgY29tbWUgRXhjZWwsIG1haXMgZG9udCBsZSBmb25jdGlvbm5lbWVudCBzJ2FwcGFyZW50ZSBwbHVzIMOgIHVuZSBiYXNlIGRlIGRvbm7DqWVzIChwYXIgZXhlbXBsZSBsZXMgdHJhaXRlbWVudHMgc29udCBzw6lwYXLDqXMgZGVzIGRvbm7DqWVzLCBpZSBsZXMgZm9ybXVsZXMgbmUgc29udCBwYXMgZW5yZWdpc3Ryw6llcyBkYW5zIGxlcyBjZWxsdWxlcyBtYWlzIGRhbnMgdW4gc2NyaXB0KS4NCg0KLSBBc3NvY2llIGxhIGZhY2lsaXTDqSBkJ3VzYWdlIGQndW4gbG9naWNpZWwgY29tbWUgRXhjZWwgw6AgbGEgcHVpc3NhbmNlIGQnb3V0aWxzIGRlIHByb2dyYW1tYXRpb24gZXQgZCdhbGdvcml0aG1lcy4NCg0KLSBVc2FnZSBkZSBsJyoqaW50ZXJmYWNlIGdyYXBoaXF1ZSoqIGV0L291ICoqc2NyaXB0cyBHUkVMKiogKCpHb29nbGUgUmVmaW5lIEV4cHJlc3Npb24gTGFuZ3VhZ2UqKTogcHJvcG9zZSB1biBlbnNlbWJsZSBkZSBmb25jdGlvbnMgYXV0b21hdGlzw6llcyBkb25jIG5lIG7DqWNlc3NpdGUgw6AgbGEgYmFzZSBhdWN1bmUgY29tcMOpdGVuY2UgZW4gcHJvZ3JhbW1hdGlvbiBvdSBhbmFseXNlLCBtYWlzIGwndXNhZ2UgZHUgbGFuZ2FnZSBwZXJtZXQgZCdhbGxlciBiZWF1Y291cCBwbHVzIGxvaW4uDQoNCi0gUGFydGljdWxpw6hyZW1lbnQgcHVpc3NhbnQgcG91ciBsZSBuZXR0b3lhZ2UgZGUgdGFibGUgZGUgZG9ubsOpZXMgYXZlYyBkdSBjb250ZW51IHRleHR1ZWwuDQoNCi0gKipSZXByb2R1Y3RpYmlsaXTDqSoqISBQZXJtZXQgZGUgZ2FyZGVyIHVuIGhpc3RvcmlxdWUgZGUgdG91dGVzIGxlcyBtYW5pcHVsYXRpb25zIGVmZmVjdHXDqWVzIHN1ciBzZXMgZG9ubsOpZXMgYWZpbiBkZSBsZXMgcGFydGFnZXIsIGRlIGxlcyByw6l1dGlsaXNlciBzdXIgZCdhdXRyZXMgZG9ubsOpZXMuLi4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJub3RlIj4NCg0KKirDgCBub3RlcioqIA0KDQpPcGVuUmVmaW5lIG4nZXN0IHBhcyB1biBvdXRpbCBkJ2FuYWx5c2Ugb3UgZGUgdmlzdWFsaXNhdGlvbiBldCBuZSBwZXJtZXQgcGFzIGRlIGNyw6llciB1biBqZXUgZGUgZG9ubsOpZXMgw6AgcGFydGlyIGRlIHrDqXJvLiBDZSBuJ2VzdCBwYXMgdW4gb3V0aWwgZGUgcmVtcGxhY2VtZW50IG1haXMgY29tcGzDqW1lbnRhaXJlLg0KDQo8L2Rpdj4NCg0KDQo8L2JyPg0KDQoqKioNCg0KPC9icj4NCg0KIyAzLiBJbnN0YWxsYXRpb24gZXQgZm9uY3Rpb25uZW1lbnQgZ8OpbsOpcmFsDQoNCi0gW1TDqWzDqWNoYXJnZXIgZXQgZMOpemlwcGVyXShodHRwczovL29wZW5yZWZpbmUub3JnL2Rvd25sb2FkLmh0bWwpIGxlIGxvZ2ljaWVsIGRhbnMgdW4gZG9zc2llciBkZSBzb24gY2hvaXguDQoNCi0gQ3LDqcOpIGVuIGxhbmdhZ2UgSmF2YSBbZG9uYyBuw6ljZXNzaXRlIGwnaW5zdGFsbGF0aW9uIGRlIEphdmEgKDY0IGJpdHMgZGUgcHLDqWbDqXJlbmNlKV0oaHR0cHM6Ly93d3cuamF2YS5jb20vZW4vZG93bmxvYWQvKS4NCg0KLSBOYXZpZ2F0ZXVycyDDoCBwcml2aWzDqWdpZXI6IENocm9tZSwgT3BlcmEsIEVkZ2UuIEZpcmVmb3ggcGV1dCBwb3NlciBwcm9ibMOobWUgKG5lIGZvbmN0aW9ubmUgcGFzIGRhbnMgSUUpLiAgDQoNCi0gTGUgZm9uY3Rpb25uZW1lbnQgZCdPcGVuUmVmaW5lIHBldXQgw6p0cmUgdW4gcGV1IGTDqXJvdXRhbnQgYXUgZMOpcGFydCBjYXIgaWwgbid5IGEgcGFzIGQnaW5zdGFsbGF0aW9uIGVuIGJvbm5lIGV0IGR1ZSBmb3JtZSBjb21tZSBwb3VyIHVuIGxvZ2ljaWVsIHLDqWd1bGllci4NCg0KLSBQb3VyIGTDqW1hcnJlciBsZSBsb2dpY2llbCwgY2xpcXVlciBzdXIgbGUgZmljaGllciBgYCBgb3BlbnJlZmluZS5leGVgIGBgIG91IGByZWZpbmUuYmF0YC4gSWwgZXN0IHV0aWxlIGRlIGZhaXJlIHVuIGNsaWMtZHJvaXQgc3VyIGxlIGZpY2hpZXIgLmV4ZSBwb3VyIGwnw6lwaW5nbGVyIGRhbnMgc2EgYmFycmUgZGUgdMOiY2hlcyAoc3VyIE1hYywgZMOpcGxhY2VyIGwnaWPDtG5lIE9wZW5SZWZpbmUgZGFucyBsZSBkb3NzaWVyIGQnYXBwbGljYXRpb25zIGV0IGRvdWJsZSBjbGlxdWVyIHN1ciBjZWxsZS1jaSkuDQoNCi0gVW5lIGZlbsOqdHJlIGRlIGNvbW1hbmRlIG5vaXJlIHMnb3V2cmlyYSBldCBsYW5jZXJhIGwnb3V2ZXJ0dXJlIGQndW4gb25nbGV0IGRhbnMgbGUgbmF2aWdhdGV1ciB3ZWIuICANCg0KLSBMYSBmZW7DqnRyZSBkZSBjb21tYW5kZXMgcGV1dCBlbnN1aXRlIMOqdHJlIGlnbm9yw6llIG1haXMgTkUgUEFTIExBIEZFUk1FUiEgRWxsZSBuZSBzZXJ2aXJhIHF1J8OgIGZlcm1lciBsYSBzZXNzaW9uIGRlIHRyYXZhaWwuICANCg0KLSBTaSBsZSBuYXZpZ2F0ZXVyIG5lIHMnb3V2cmUgcGFzIGF1dG9tYXRpcXVlbWVudCwgc2Fpc2lyIGwnYWRyZXNzZSBodHRwOi8vMTI3LjAuMC4xOjMzMzMvIG91IGh0dHA6Ly9sb2NhbGhvc3Q6MzMzMyBkYW5zIHVuIG9uZ2xldC4gDQoNCjxjZW50ZXI+ICANCg0KIVtdKGltYWdlcy9PUjE3LmpwZyl7d2lkdGg9ODAlfQ0KDQo8L2NlbnRlcj4gIA0KDQo8L2JyPg0KDQoqKioNCg0KPC9icj4NCg0KIyMgMy4xLiBUcmF2YWlsIGxvY2FsDQoNCi0gUmVwb3NlIGRvbmMgc3VyIGRldXggY29tcG9zYW50ZXM6IHVuICoqc2VydmV1ciB3ZWIgbG9jYWwqKiBldCB1biAqKm9uZ2xldCBkZSBuYXZpZ2F0ZXVyIHdlYioqIHBvaW50YW50IHZlcnMgbCdhZHJlc3NlIGR1IHNlcnZldXIgc3VyIHNvbiBwb3N0ZS4NCg0KLSBMZSB0cmF2YWlsIHNlIGZhaXQgZGFucyB1biBvbmdsZXQgZGUgbmF2aWdhdGV1ciBxdWkgZXN0IHVuZSBzaW1wbGUgaW50ZXJmYWNlIGdyYXBoaXF1ZSBwb3VyIGludGVyYWdpciBhdmVjIGNlIHNlcnZldXIgbG9jYWwsIG1haXMgKipsZXMgZG9ubsOpZXMgbmUgc29udCBwYXMgc3VyIGxlICJudWFnZSIqKi4NCg0KLSBUcmF2YWlsIGxvY2FsIGRvbmMgcGFzIGQnZW52aXJvbm5lbWVudCBjb2xsYWJvcmF0aWYuIA0KDQotIExlcyBmaWNoaWVycyBwcm9ncmFtbWVzIHNlIHRyb3V2ZXJvbnQgZGFucyBsZSBkb3NzaWVyIGQnaW5zdGFsbGF0aW9uIGV0IGxlcyBmaWNoaWVycyBkZSBwcm9qZXRzIGRhbnMgbGUgKndvcmtzcGFjZSBkaXJlY3RvcnkqLg0KDQotIE9wZW5SZWZpbmUgbmUgbW9kaWZpZSBwYXMgbGUgZmljaGllciBvcmlnaW5hbCwgaWwgdHJhdmFpbGxlIMOgIHBhcnRpciBkJ3VuZSAqKmNvcGllIGVuIG3DqW1vaXJlIHN0b2Nrw6llIGVuIGFyY2hpdmVzKiogZGFucyBsZSByw6lwZXJ0b2lyZSBkZSB0cmF2YWlsLg0KDQotIExlIHByb2pldCBlc3QgZW5yZWdpc3Ryw6kgZW4gZm9ybWF0IE9wZW5SZWZpbmUgYXV0b21hdGlxdWVtZW50IGRhbnMgbGUgZG9zc2llciBkZSB0cmF2YWlsIMOgIHRvdXRlcyBsZXMgNSBtaW51dGVzIChbcGV1dCDDqnRyZSBtb2RpZmnDqV0oaHR0cHM6Ly9kb2NzLm9wZW5yZWZpbmUub3JnL21hbnVhbC9ydW5uaW5nI2p2bS1wcmVmZXJlbmNlcykpLg0KDQotIExlIGZpY2hpZXIgZGUgZG9ubsOpZXMgdW5lIGZvaXMgbmV0dG95w6kgcG91cnJhIMOqdHJlIGV4cG9ydMOpIGVuIGRpZmbDqXJlbnRzIGZvcm1hdHMgZXQgbCdoaXN0b3JpcXVlL3N5bnRheGUgcG91cnJhIMOqdHJlIGV4dHJhaXQgZW4gZm9ybWF0IEpTT04gZXQgZW5yZWdpc3Ryw6kgZGFucyB1biBmaWNoaWVyIC50eHQuDQoNCi0gUG91ciBmZXJtZXIgbGEgc2Vzc2lvbiBkZSB0cmF2YWlsIGNvcnJlY3RlbWVudCwgZmFpcmUgYEN0cmwgKyBjYCBkYW5zIGZlbsOqdHJlIGRlIGNvbW1hbmRlIChwZXV0IMOqdHJlIG7DqWNlc3NhaXJlIGRlIGxlIGZhaXJlIHBsdXMgZCd1bmUgZm9pcykgPSBlbnJlZ2lzdHJlIGxlIHByb2pldCBldCBmZXJtZSBsZSBzZXJ2ZXVyLg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gIm5vdGUiPg0KKirDgCBub3RlcioqICANCi0gUGVybWV0IGRlIHRyYXZhaWxsZXIgc3VyIGRlIGdyb3MgZmljaGllcnMgbWFpcyBsYSB0YWlsbGUgcG9zc2libGUgZXN0IHRvdXQgZGUgbcOqbWUgbGltaXTDqWUsIGxhIHBlcmZvcm1hbmNlIHBldXQgZGV2ZW5pciBwcm9ibMOpbWF0aXF1ZSDDoCBwbHVzaWV1cnMgY2VudGFpbmVzIGRlIG1pbGxpZXJzIGRlIGxpZ25lcyAodG91dCBkw6lwZW5kYW50IGR1IG5vbWJyZSBkZSBjb2xvbm5lcykgZG9uYyBwYXMgdnJhaW1lbnQgZMOpdmVsb3Bww6kgcG91ciBmYWlyZSBkdSBiaWcgZGF0YS4NCi0gVHJhdmFpbGxlIGF2ZWMgMUdvIGRlIG3DqW1vaXJlIHBhciBkw6lmYXV0LiDDgCBwbHVzIGRlIDEwMCAwMDAgbGlnbmVzLCBpbCBwZXV0IMOqdHJlIHByw6lmw6lyYWJsZSBkJ1thdWdtZW50ZXIgbGEgbcOpbW9pcmVdKGh0dHBzOi8vZG9jcy5vcGVucmVmaW5lLm9yZy9tYW51YWwvaW5zdGFsbGluZyNpbmNyZWFzaW5nLW1lbW9yeS1hbGxvY2F0aW9uKSBkZSB0cmF2YWlsOiAgDQogIC0gT3V2cmlyIGxlIGZpY2hpZXIgcmVmaW5lLmluaSBkYW5zIG5vdGVwYWQgZXQgbW9kaWZpZXIgbGEgbGlnbmUgUkVGSU5FX01FTU9SWSA9IHBhcmFtZXRyZS4gIA0KICAtIFBhciBsYSBzdWl0ZSBsYW5jZXIgT1IgYXZlYyBsZSBmaWNoaWVyICpyZWZpbmUuYmF0KiBldCBub24gKm9wZW5yZWZpbmUuZXhlICouICAgDQoNCjwvZGl2Pg0KPC9icj4NCg0KKioqDQoNCjwvYnI+DQoNCiMjIDMuMi4gw4ljcmFuIGQnYWNjdWVpbA0KDQotIMOAIHBhcnRpciBkdSBtZW51IGRlIGdhdWNoZSwgaWwgZXN0IHBvc3NpYmxlIGRlIGBDcsOpZXIgdW4gcHJvamV0YCwgYE91dnJpciB1biBwcm9qZXRgIChoaXN0b3JpcXVlIGRlcyBwcm9qZXRzIGVucmVnaXN0csOpcykgb3UgYEltcG9ydGVyIHVuIHByb2pldCBgIChhcmNoaXZlcyAuemlwIHNlIHRyb3V2YW50IGRhbnMgbGUgZG9zc2llciBkZSB0cmF2YWlsKS4gICANCg0KLSBQb3VyIGNoYW5nZXIgbGEgbGFuZ3VlIGRlIGwnaW50ZXJmYWNlIGF1IGZyYW7Dp2FpcywgY2xpcXVlciBzdXIgbCdvbmdsZXQgYExhbmd1ZWAgZGFucyBsZSBtZW51IGRlIGdhdWNoZS4gIA0KDQotIExlIGZpY2hpZXIgcGV1dCDDqnRyZSBjcsOpw6kgw6AgcGFydGlyIGRlIGRpZmbDqXJlbnRlcyBzb3VyY2VzOiBgQ2V0IG9yZGluYXRldXJgIChwb3N0ZSBsb2NhbCksIGBBZHJlc3NlcyB3ZWIgKFVSTHMpYCwgYFByZXNzZS1wYXBpZXJgIChjb3Bpw6ktY29sbMOpKSwgYEdvb2dsZSBkYXRhYCAoR29vZ2xlIHNoZWV0cykuLi4pIGV0IGVuIGRpZmbDqXJlbnRzIGZvcm1hdHMgKC5jc3YsIC50eHQsIC54bWwsIC54bHMsIC5KU09OLCAuemlwIGV0IG5vbiB0YXIuLi4gKGNlcnRhaW5lcyBleHRlbnNpb25zIHBlcm1ldHRlbnQgbCd1c2FnZSBkJ2F1dHJlcyBmb3JtYXRzIGNvbW1lIHJkZikuICANCg0KPGNlbnRlcj4gIA0KDQohW10oaW1hZ2VzL09SMS5qcGcpICANCg0KPC9jZW50ZXI+ICANCg0KLSBEZXV4IGZpY2hpZXJzIG91IHBsdXMgcGV1dmVudCDDqnRyZSBpbXBvcnTDqXMgZW4gbcOqbWUgdGVtcHMuIExlcyBsaWduZXMgc2Vyb250IGltcG9ydMOpZXMgdW5lIMOgIGxhIHN1aXRlIGRlIGwnYXV0cmUgc2Vsb24gbCdvcmRyZSBkJ2ltcG9ydGF0aW9uICh1bmUgY29sb25uZSBwZXJtZXR0YW50IGQnaWRlbnRpZmllciBsZSBmaWNoaWVyIHNvdXJjZSBzZXJhIGNyw6nDqWUgYXV0b21hdGlxdWVtZW50KS4gDQoNCjwvYnI+DQoNCioqKg0KDQo8L2JyPg0KDQojIyAzLjMuIEhpc3RvcmlxdWUgZGVzIHByb2pldHMNCg0KLSBMJ29uZ2xldCBgT3V2cmlyIHVuIHByb2pldGAgcGVybWV0Og0KICAtIEQnYWNjw6lkZXIgZXQgZCdvdXZyaXIgdG91cyBsZXMgcHJvamV0cyBlbnJlZ2lzdHLDqXMgbG9jYWxlbWVudC4NCiAgLSBEJ8OpZGl0ZXIgc2VzIG3DqXRhZG9ubsOpZXMuDQogIC0gRCdhY2PDqWRlciBhdSBkb3NzaWVyIGRlIHRyYXZhaWwgKGTDqWZpbmkgcGFyIGTDqWZhdXQpIG/DuSBPcGVuUmVmaW5lIHN0b2NrZSBsZXMgYXJjaGl2ZXMgZGVzIHByb2pldHMgZW5yZWdpc3Ryw6lzIHBhciBsZSBiaWFpcyBkdSBsaWVuIGBQYXJjb3VyaXIgbGUgZG9zc2llciBkZSBsJ2VzcGFjZSBkZSB0cmF2YWlsYC4NCg0KPGNlbnRlcj4gIA0KDQohW10oaW1hZ2VzL09SMy5qcGcpDQoNCjwvY2VudGVyPiAgDQoNCjwvYnI+DQoNCioqKg0KDQo8L2JyPg0KDQojIDQuIENyw6llciB1biBwcm9qZXQNCg0KLSBQb3VyIG91dnJpciB1biBmaWNoaWVyIMOgIHBhcnRpciBkZSBzb24gcG9zdGUsIGNsaXF1ZXIgc3VyIGBDcsOpZXIgdW4gcHJvamV0YCAtID4gYENldCBvcmRpbmF0ZXVyYCAtID4gYHPDqWxlY3Rpb25uZXIgZmljaGllcnNgIHN1ciBzb24gIHBvc3RlIC0+IGBTdWl2YW50YC4gIA0KDQotIFBvdXIgb3V2cmlyIGxlIGZpY2hpZXIgw6AgcGFydGlyIGRlIHNvbiBlbXBsYWNlbWVudCBzdXIgR2l0aHViOiBodHRwczovL2dpdGh1Yi5jb20vQ1JMTlAvb3BlbnJlZmluZSANCiAgLSBDbGlxdWVyIHN1ciBsZSBmaWNoaWVyICpJbmNpZGVudHMgbcOpdHJvLW10bC5jc3YqIC0+IENsaXF1ZXIgc3VyIGxlIGJvdXRvbiBSQVcgLT4gY29waWVyIGwnYWRyZXNzZSBkdSBuYXZpZ2F0ZXVyLg0KICAtIERhbnMgT3BlblJlZmluZSwgQ3LDqWVyIHVuIHByb2pldCAtPiBBZHJlc3NlcyB3ZWIgKFVSTHMpIC0+IGNvbGxlciBsZSBsaWVuLg0KDQotIFVuZSBmZW7DqnRyZSBzJ291dnJlIGVuc3VpdGUgcG91ciBwZXJtZXR0cmUgZGUgcHLDqS12aXN1YWxpc2VyIHNvbiBqZXUgZGUgZG9ubsOpZXMgZXQgZGUgbW9kaWZpZXIsIHNpIG7DqWNlc3NhaXJlLCBsZXMgb3B0aW9ucyBkJ2ltcG9ydGF0aW9uIGVuIGZvbmN0aW9uIGRlcyBjYXJhY3TDqXJpc3RpcXVlcyBkdSBmaWNoaWVyIGRlIGRvbm7DqWVzOiBtb2RpZmljYXRpb24gZHUgZm9ybWF0IGRlIGZpY2hpZXIgcydpbCBuJ2EgcGFzIMOpdMOpIGlkZW50aWZpw6kgY29ycmVjdGVtZW50ICg1KSwgbCdlbmNvZGFnZSBkZXMgY2FyYWN0w6hyZXMgW1VURi04XSAoNiksIGxlIHRyYWl0ZW1lbnQgZGVzIGVudMOqdGVzIGV0IHByZW1pw6hyZXMgbGlnbmVzICg5KS4uLg0KDQo8L2JyPg0KDQohW10oaW1hZ2VzL09SMi5qcGcpICANCjwvYnI+DQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIENyw6llciB1biBub3V2ZWF1IHByb2pldCBlbiBpbXBvcnRhbnQgbGUgZmljaGllciBgSW5jaWRlbnRzIG3DqXRyby5jc3ZgIGRpc3BvbmlibGUgc3VyIGxlIHNpdGUgW0Rvbm7DqWVzIG91dmVydGVzIE1vbnRyw6lhbF0oaHR0cHM6Ly9kb25uZWVzLm1vbnRyZWFsLmNhL3NvY2lldGUtZGUtdHJhbnNwb3J0LWRlLW1vbnRyZWFsL2luY2lkZW50cy1kdS1yZXNlYXUtZHUtbWV0cm8pICh2b2lyIGF1c3NpIGxlIHNpdGUgZGUgbGEgU1RNIFtJbmRpY2F0ZXVycyBkZSBwZXJmb3JtYW5jZSByZWxpw6lzIGF1IHNlcnZpY2UgbcOpdHJvXShodHRwOi8vd3d3LnN0bS5pbmZvL2ZyL2EtcHJvcG9zL2luZm9ybWF0aW9ucy1lbnRyZXByaXNlLWV0LWZpbmFuY2llcmVzL2V4cGVyaWVuY2UtY2xpZW50L2luZGljYXRldXJzLWRlLXBlcmZvcm1hbmNlLXJlbGllcykpDQoNCi0gRXhwbG9yZXIgbGVzIG9wdGlvbnMgZCdpbXBvcnRhdGlvbiAtPiBQb3J0ZXIgdW5lIGF0dGVudGlvbiBwYXJ0aWN1bGnDqHJlIGF1eCBvcHRpb25zOiBgU3VwcHJpbWVyIGxlcyBlc3BhY2VzYCAoOCAtPiBjb2NoZXIpLCAJYFV0aWxpc2VyIGxlIGNhcmFjdMOocmUJIiBwb3VyIGZlcm1lciBsZXMgY2VsbHVsZXMgY29udGVuYW50IGxlcyBzw6lwYXJhdGV1cnMgZGUgY29sb25uZXNgICgxMCAtPiBjb2NoZXIgb3Ugbm9uKSwgYEFuYWx5c2VyIGxlIHRleHRlIGRlcyBjZWxsdWxlcyBjb21tZSBub21icmVzICwgZGF0ZXPigKZgICgxMSAtPiBkw6ljb2NoZXIpDQoNCi0gQ2hhbmdlciBsZSBgTm9tIGR1IHByb2pldGAgWzJdIGV0IGNsaXF1ZXIgc3VyIGBDcsOpZXIgdW4gcHJvamV0YCBbNF0gLSBFbiBjYXMgZGUgcHJvYmzDqG1lLCBpbCBlc3QgcG9zc2libGUgZGUgcmVjb21tZW5jZXIgbGUgcHJvY2Vzc3VzIFsxXS4NCjwvZGl2Pg0KDQo8L2JyPg0KDQoqKioNCg0KPC9icj4NCg0KIyA1LiBFeHBsb3JlciBsJ2ludGVyZmFjZQ0KDQotIEwnaW50ZXJmYWNlIGVzdCBzaW1pbGFpcmUgw6AgRXhjZWwgbWFpcyBvbiBuZSBwZXV0IHZvaXIgbCdlbnNlbWJsZSBkZXMgbGlnbmVzLCBsYSAibG9naXF1ZSIgZCdPcGVuUmVmaW5lIHJlcG9zZSBzdXIgbGUgdHJhdmFpbCBlbiAqKmNvbG9ubmVzKiouDQoNCi0gT3BlblJlZmluZSBwcm9wb3NlIGRldXggdnVlcyBkZXMgZG9ubsOpZXM6IGBsaWduZXNgIGV0IGBlbnRyw6llcy5gIExlcyBkb25uw6llcyBzb250IGfDqW7DqXJhbGVtZW50IHByw6lzZW50w6llcyBlbiBtb2RlIGBsaWduZXNgLCBjJ2VzdC3DoC1kaXJlIGNoYXF1ZSBsaWduZSByZXByw6lzZW50ZSB1bmUgb2JzZXJ2YXRpb24uIExlIG1vZGUgYGVudHLDqWVzYCBwZXJtZXQgZCdhc3NvY2llciBwbHVzaWV1cnMgbGlnbmVzIMOgIHVuZSBvYnNlcnZhdGlvbi4NCg0KLSBJbCBlc3QgZG9uYyBwb3NzaWJsZSBkZSBtb2RpZmllciBsYSBzdHJ1Y3R1cmUgZHUgZmljaGllciBwb3VyIHF1ZSBwbHVzaWV1cnMgbGlnbmVzIHNvaWVudCBhc3NvY2nDqWVzIMOgIHVuIHNldWwgY2FzIGVuIHNlIGJhc2FudCBzdXIgbGEgY29sb25uZSBjbMOpICgqKnNldWxlIGxhIGxpZ25lIG9yaWdpbmFsZSBzZXJhIG51bcOpcm90w6llKiopLCBtYWlzIGRvaXQgc2UgZmFpcmUgYXZlYyBwcsOpY2F1dGlvbnMuIFBvdXIgbGVzIGxvZ2ljaWVscyBkJ2FuYWx5c2UsIGxlIGZvcm1hdCAqdGlkeSogKGBsaWduZXNgKSBlc3Qgw6AgcHJpdmlsw6lnaWVyLg0KDQo8Y2VudGVyPiAgDQoNCiFbXShpbWFnZXMvT1I0LmpwZykgDQoNCjwvY2VudGVyPiAgDQoNCjEuIExpZW4gc291cyBsJ2ljw7RuZSByZW52b2kgdmVycyBsYSBwYWdlIGQnYWNjdWVpbC9pbXBvcnRhdGlvbi4NCjIuIFJlbm9tbWVyIGxlIG5vbSBkZSBzb24gcHJvamV0IGVuIHRvdXQgdGVtcHMuDQozLiBQZXJtYWxpZW4gcXVpIHBlcm1ldCBkZSByZXZlbmlyIMOgIHVuZSB2dWUgcHLDqWNpc2UgKGFmZmljaGFnZSwgdHJpLCBmYWNldHRlcy4uLikgZHUgcHJvamV0Lg0KNC4gTm9tYnJlIGRlIGxpZ25lcy9vYnNlcnZhdGlvbnMgZHUgZmljaGllci4NCjUuIENoYW5nZW1lbnQgZHUgbW9kZSBsaWduZXMgb3Ugb2JzZXJ2YXRpb25zLg0KNi4gTW9kaWZpZXIgbGUgbm9tYnJlIGRlIGxpZ25lcyBhZmZpY2jDqWVzLg0KNy4gUGFzc2VyIGQndW5lIHBhZ2Ugw6AgbCdhdXRyZS4NCjguIE91dnJpciB1biBub3V2ZWwgb25nbGV0IE9wZW5SZWZpbmUuDQo5LiBFeHBvcnRlciBsZSBmaWNoaWVyIGVuIGRpZmbDqXJlbnRzIGZvcm1hdHMuDQoNCjwvYnI+DQoNCioqKg0KDQo8L2JyPiANCg0KIyMgNS4xLiBMJ8OpZGl0aW9uIGRlIGNlbGx1bGVzDQoNCi0gSWwgZXN0IHBvc3NpYmxlIGQnw6lkaXRlciBtYW51ZWxsZW1lbnQgbGUgY29udGVudSBkZSBjZWxsdWxlcyBpbmRpdmlkdWVsbGVzIGVuIHNlIHBsYcOnYW50IHN1ciBjaGFjdW5lIGV0IGVuIGNsaXF1YW50IGBlZGl0YCwgbWFpcyBPcGVuUmVmaW5lIHByaXZpbMOpZ2llIGxlICoqdHJhdmFpbCBlbiBsb3QgcGFyIGNvbG9ubmVzKiogcG91ciBmaWx0cmVyLCB0cmllciwgdHJhbnNmb3JtZXIuDQoNCi0gTCfDqWRpdGlvbiBkaXJlY3RlIHBldXQgcydhcHBsaXF1ZXIgaW5kaXZpZHVlbGxlbWVudCBvdSBzdXIgdG91dGVzIGxlcyBjZWxsdWxlcyBhdmVjIGxhIG3Dqm1lIHZhbGV1ciBkYW5zIGNldHRlIGNvbG9ubmUuDQoNCi0gUGVybWV0IMOpZ2FsZW1lbnQgZGUgbW9kaWZpZXIgbGUgZm9ybWF0IGRlIGxhIGNlbGx1bGUuDQoNCjxjZW50ZXI+ICANCg0KIVtdKGltYWdlcy9PUjIyLmpwZyl7d2lkdGg9ODAlfQ0KDQo8L2NlbnRlcj4gIA0KDQoNCjwvYnI+DQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIERhbnMgbGEgY29sb25uZSAqQ2F1c2UgcHJpbWFpcmUqIGNsaXF1ZXIgZGFucyB1bmUgY2VsbHVsZSAqQXV0cmVzKiwgw6lkaXRlciBzb24gY29udGVudSBwb3VyICphdXRyZSogZXQgYXBwbGlxdWVyIMOgIGxhIGNlbGx1bGUuIA0KLSBEYW5zIGxhIGNvbG9ubmUgKlBvcnRlKiwgbW9kaWZpZXIgbGUgZm9ybWF0IGRlIG4naW1wb3J0ZSBxdWVsbGUgY2VsbHVsZSDDoCAqTm9tYnJlKiBldCBhcHBsaXF1ZXIgw6AgdG91dGVzIGxlcyBjZWxsdWxlcyBpZGVudGlxdWVzLg0KLSBEYW5zIGxhIGNvbG9ubmUgKsOJdmFjdWF0aW9uKiwgbW9kaWZpZXIgbGUgY29udGVudSBkJ3VuZSBjZWxsdWxlICIjIiBwYXIgKk5vbiogZXQgYXBwbGlxdWVyIMOgIHRvdXRlcyBsZXMgY2VsbHVsZXMgaWRlbnRpcXVlcy4NCjwvZGl2Pg0KDQo8L2JyPg0KDQoqKioNCg0KPC9icj4NCg0KIyMgNS4yLiBGb3JtYXQgZGVzIGRvbm7DqWVzDQoNCiMjIyMgVHJvaXMgZm9ybWF0cyBkZSBiYXNlOiANCiAgMS4gQ2hhw65uZSBkZSBjYXJhY3TDqHJlcw0KICAyLiBOb21icmUNCiAgMy4gRGF0ZSAobm9ybWUgSVNPLTg2MDEgWVlZWS1NTS1ERFRISDpNTTpTU1opKg0KICANCiAgPC9icj4NCiAgDQojIyMjIERldXggZm9ybWF0cyBkw6ljb3VsYW50IGQnYWN0aW9uczogDQogIC0gRXJyZXVyIChmb3JtYXQgYXR0cmlidcOpIHN1aXRlIMOgIHVuZSBlcnJldXIgZGUgdHJhbnNmb3JtYXRpb24pICANCiAgLSBOdWxsKioNCg0KPC9icj4NCg0KIyMjIyBEZXV4IGF1dHJlcyB0eXBlcyBwYXJ0aWN1bGllcnMgZMOpY291bGFudCBkZSBtYW5pcHVsYXRpb25zDQogIC0gQm9vbMOpZW4gKHZhbGV1ciBiaW5haXJlIFQgb3UgRikNCiAgLSAqQXJyYXkqIChsaXN0ZSBkZSB2YWxldXJzIHPDqXBhcsOpZXMgcGFyIHVuZSB2aXJndWxlIGVudHJlIGNyb2NoZXRzIHBvdXZhbnQgw6p0cmUgdHJhbnNmb3Jtw6llcykNCg0KPC9icj4NCg0KIyMjIyMgKiBGb3JtYXQgZGF0ZQ0KDQotIFNlbG9uIGxlcyBiZXNvaW5zLCBsZXMgZGF0ZXMgcGV1dmVudCDDqnRyZSB0cmFpdMOpZXMgc291cyBmb3JtZSBkZSBgdGV4dGVgLCBkZSBgbm9tYnJlYCBvdSBgZGF0ZWAgKGxlIGZvcm1hdCBkYXRlIGVzdCBzdXJ0b3V0IG7DqWNlc3NhaXJlIHBvdXIgbGVzIGNhbGN1bHMgZGUgZGF0ZXMpLg0KLSBMZSBmb3JtYXQgZGF0ZSByZXBvc2Ugc3VyIHVuZSBzw6lyaWUgZCdvdXRpbHMgZXQgZGUgIHN0YW5kYXJkcyBwb3VyIHJlY29ubmFpdHJlIGV0IGNvbnZlcnRpciBsZXMgdmFsZXVycyBvcmlnaW5hbGVzIGVuIGRhdGUuIA0KLSBQb3VyIHF1J3VuZSBjZWxsdWxlIHNvaXQgcmVjb25udWUgY29tbWUgZGF0ZSwgZWxsZSBzZXJhIHRyYW5zZm9ybcOpZSBhdSBmb3JtYXQgKklTTy04NjAxLWNvbXBsaWFudCouDQotIFBvc3NpYmxlIGRlIG1vZGlmaWVyIGNlIGZvcm1hdCBwb3VyIHF1J2lsIHNvaXQgcGx1cyBmYWNpbGVtZW50IGxpc2libGUgw6AgbCdleHBvcnRhdGlvbi4NCg0KPC9icj4NCg0KIyMjIyMgKiogRm9ybWF0ICJtYW5xdWFudCINCg0KLSBPcGVuUmVmaW5lIGZhaXQgdW5lIGRpc3RpbmN0aW9uIGVudHJlIGxlcyAqKmNlbGx1bGVzIHZpZGVzIGF2ZWMgZXNwYWNlcyBibGFuY3MqKiAocXVpIG5lIHNvbnQgcGFzIHZpZGVzISksIGxlcyAqKnZhbGV1cnMgdmlkZXMqKiAoY2hhaW5lIGRlIGxvbmd1ZXVyIDApLCBldCBsZXMgKip2YWxldXJzICJudWxsIioqICh0eXBlIHNww6ljaWFsIHF1aSBuJ2VzdCBwYXMgdW5lIGNoYWluZSBkZSBjYXJhY3TDqHJlcykuIExlcyAqdmlkZXMqIGV0IGxlcyAqbnVsbCogc29udCBhdXNzaSBjb25zaWTDqXLDqXMgY29tbWUgKkJsYW5rKi4NCi0gUGx1c2lldXJzIGZvbmN0aW9ucyBhdXRvbWF0aXPDqWVzIHNvdXMgYEZhY2V0dGVzYCBldCBgw4lkaXRlciBsZXMgY2VsbHVsZXNgIHBlcm1ldHRlbnQgZGUgZ8OpcmVyIGNlcyB0eXBlcyBkZSB2YWxldXJzLg0KDQo8L2JyPg0KDQojIyBFeGVyY2ljZQ0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KKipUcmFuc2Zvcm1lciB1bmUgY29sb25uZSBkYXRlIGRlIGZvcm1hdCBjYXJhY3TDqHJlIGVuIGZvcm1hdCBkYXRlKio6ICANCi0gRGFucyBsYSBjb2xvbm5lICpKb3VyIGNhbGVuZGFpcmUqOiBgTWVudSAtPiDDiWRpdGVyIGxlcyBjZWxsdWxlcyAtPiBUcmFuc2Zvcm1hdGlvbnMgY291cmFudGVzIC0+IEVuIGRhdGVgICAgIA0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAibm90ZSI+DQotIMOAIGwnaW1wb3J0YXRpb24gZCd1biBmaWNoaWVyLCBjaGFxdWUgY2VsbHVsZSBzZSB2ZXJyYSBhdHRyaWJ1ZXIgdW4gZm9ybWF0LiANCi0gUGFyIGTDqWZhdXQsIGxlIGNvbnRlbnUgZGVzIGNlbGx1bGVzIGVzdCBkZSBmb3JtYXQgY2hhw65uZXMuICANCi0gTGUgY29udGVudSBkZXMgY2VsbHVsZXMgcmVjb25udSBjb21tZSBudW3DqXJpcXVlIGV0IGRhdGUgc2VyYSBkZSBjb3VsZXVyIHZlcnRlLiAgDQotIExlIGZvcm1hdCBwZXV0IMOqdHJlIG1vZGlmacOpIGRlIGRpZmbDqXJlbnRlcyBmYcOnb25zOiBCb3V0b24gYGVkaXRgLCBgVHJhbnNmb3JtYXRpb25zIGNvdXJhbnRlc2AsIEZlbsOqdHJlIEdSRUwuICANCi0gQ2UgZm9ybWF0IGF1cmEgdW4gaW1wYWN0IHN1ciBsZXMgYWN0aW9ucyBwb3NzaWJsZXMuICANCi0gTGUgY2hhbmdlbWVudCBkZSBmb3JtYXQgcGFyIMOpZGl0aW9uIGRpcmVjdGUgZCd1bmUgY2VsbHVsZSBlc3QgdW5lIG9ww6lyYXRpb24gZGlzdGluY3RlIGRlIGxhIHRyYW5zZm9ybWF0aW9uIGR1IGNvbnRlbnUuIExhIHByZW1pw6hyZSBvcMOpcmF0aW9uIGFycml2ZSBwYXJmb2lzIMOgIGNoYW5nZXIgZGVzIGZvcm1hdHMgcXVlIGxhIHRyYW5zZm9ybWF0aW9uIG5lIHBldXQgZmFpcmUuDQotIFBvdXIgcGx1cyBkJ2luZm9ybWF0aW9uIHN1ciBsZXMgZm9ybWF0cywgdm9pciBsYSBbZG9jdW1lbnRhdGlvbiBvZmZpY2llbGxlXShodHRwczovL2RvY3Mub3BlbnJlZmluZS5vcmcvbWFudWFsL2V4cGxvcmluZykuICANCjwvZGl2Pg0KDQo8L2JyPg0KDQoqKioNCg0KIyMgNS4zLiBMYSBnZXN0aW9uIGRlcyBsaWduZXMgZXQgY29sb25uZXMNCg0KKipMYSBnZXN0aW9uIGRlcyBjb2xvbm5lcyBwZXV0IHNlIGZhaXJlOioqDQoNCi0gU3VyIGNoYXF1ZSBjb2xvbm5lOiANCiAgLSBGb25jdGlvbnMgc291cyBgw4lkaXRlciBsYSBjb2xvbm5lIC0+IETDqXBsYWNlciAuLi4gLyBSZW5vbW1lciAvIFN1cHByaW1lcmAgICANCiAgLSBGb25jdGlvbnMgc291cyBgQXBlcsOndSAtPiBNYXNxdWVyLi4uIGAgICANCg0KPC9icj4NCg0KLSBTdXIgbGEgY29sb25uZSBgVG91dGVzYDogICAgIA0KICAtIGDDiWRpdGVyIGxlcyBjb2xvbm5lcyAtPiBSZXRyaWVyLXN1cHByaW1lciwgZ2VzdGlvbiBkZXMgdmFsZXVycyBjb25zw6ljdXRpdmVzYCAgICANCiAgLSBgQXBlcsOndSAtPiBBZmZpY2hlci1tYXNxdWVyYC4uLiAgDQoNCjwvYnI+DQoNCioqTGEgZ2VzdGlvbiBkZXMgbGlnbmVzOioqDQoNCi0gTGEgc8OpbGVjdGlvbiBkZSBsaWduZXMgcGV1dCBzZSBmYWlyZSBwYXIgbGUgYmlhaXMgZGUgZmlsdHJlcywgZmFjZXR0ZXMgZXQgYXV0cmVzIG1hbmlwdWxhdGlvbnMgcGVyc29ubmFsaXPDqWVzLiAgDQotIElsIGVzdCBhdXNzaSBwb3NzaWJsZSBkZSBtYXJxdWVyL8OpdG9pbGVyIGRlcyBsaWduZXMgZW4gbG90IG91IGluZGl2aWR1ZWxsZW1lbnQgcHVpcyBkZSBjcsOpZXIgdW5lIGZhY2V0dGUgc3VyIGxhIGNvbG9ubmUgYFRvdXRlc2AuICANCi0gT24gcGV1dCBlbnN1aXRlIHN1cHByaW1lciBsZXMgbGlnbmVzIGZpbHRyw6llczogYFRvdXRlcyAtPiDDiWRpdGVyIGxlcyBsaWduZXMgLT4gU3VwcHJpbWVyIGxlcyBsaWduZXMgY29ycmVzcG9uZGFudGVzYC4gIA0KDQo8L2JyPg0KDQojIyBFeGVyY2ljZQ0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KKipTdXBwcmltZXIgdW5lIGNvbG9ubmU6ICoqICANCi0gU3VyIGxhIGNvbG9ubmUgKlR5cGUgZCdpbmNpZGVudCogLT4gYMOJZGl0ZXIgbGEgY29sb25uZSAtPiBTdXBwcmltZXIgY2V0dGUgY29sb25uZWAuICANCg0KKipTdXBwcmltZXIgcGx1c2lldXJzIGNvbG9ubmVzOiAqKiAgDQotIFN1ciBsYSBjb2xvbm5lICpUb3V0ZXMqIC0+IGDDiWRpdGVyIGxhIGNvbG9ubmUgLT4gw4lkaXRlci9TdXBwcmltZXIgbGVzIGNvbG9ubmVzYCAtPiAqS0ZTKiBldCAqQ0FUKi4gIA0KDQo8L2Rpdj4NCg0KKioqDQoNCjwvYnI+DQoNCiMjIDUuNC4gSGlzdG9yaXF1ZSAoVW5kby9SZWRvKQ0KDQotIFRvdXRlcyBsZXMgYWN0aW9ucyBzb250IGVucmVnaXN0csOpZXMgKGxvZyBkZSBzZXMgbWFuaXB1bGF0aW9ucykgZXQgcGV1dmVudCDDqnRyZSBhbm51bMOpZXMgZW4gcmVjdWxhbnQgw6l0YXBlIHBhciDDqXRhcGUgZGFucyBsJ2hpc3RvcmlxdWUuICANCi0gTGEgcHJlbWnDqHJlIGFjdGlvbiBkJ3VuIGhpc3RvcmlxdWUgZXN0IGxhIGNyw6lhdGlvbiBkdSBwcm9qZXQuICANCi0gUHVpc3F1ZSBsJ2hpc3RvcmlxdWUgZmFpdCBwYXJ0aWUgZHUgcHJvamV0IGVucmVnaXN0csOpIGRhbnMgbGUgZG9zc2llciBkZSB0cmF2YWlsLCBpbCBuZSBkaXNwYXJhaXQgcGFzIMOgIGxhIGZlcm1ldHVyZSBkZSBsYSBzZXNzaW9uLiANCi0gTCdoaXN0b3JpcXVlIHBldXQgw6p0cmUgZXh0cmFpdCBlbiBmb3JtYXQgSlNPTiwgY29waWVyL2NvbGxlciBkYW5zIG5vdGVwYWQgZXQgYXBwbGlxdWVyIGRlIG5vdXZlYXUuICANCg0KPGNlbnRlcj4gIA0KDQohW10oaW1hZ2VzL09SMTkuanBnKXt3aWR0aD02MCV9DQoNCjwvY2VudGVyPiAgDQoNCioqQXR0ZW50aW9uISoqDQoNCi0gU2kgb24gcmVjdWxlIGRhbnMgbGUgdGVtcHMgZXQgcXUnb24gZmFpdCB1bmUgbW9kaWZpY2F0aW9uLCBsZXMgw6l0YXBlcyBxdWkgc3VpdmVudCBkYW5zIGwnaGlzdG9yaXF1ZSBkaXNwYXJhaXNzZW50IHBvdXIgZGUgYm9uLiAgDQoNCi0gTGVzIG1hbmlwdWxhdGlvbnMgcmVsYXRpdmVzIMOgIGwnYWZmaWNoYWdlIG5lIHNvbnQgcGFzIGVucmVnaXN0csOpZXMgZGFucyBsJ2hpc3RvcmlxdWUsIHNldWxlbWVudCBsZXMgdHJhbnNmb3JtYXRpb25zLiBMJ2VucmVnaXN0cmVtZW50IGF1dG9tYXRpcXVlIG5lIGNvbXByZW5kIGRvbmMgcGFzIGxlcyBmYWNldHRlcyBldCBmaWx0cmVzICh2dWUgZGUgbCdpbnRlcmZhY2UpIC0gcGVyZCBjZSBxdWkgbidhcHBhcmFpdCBwYXMgZGFucyBsZSBgRMOpZmFpcmUvUmVmYWlyZWAuDQoNCi0gTCfDqWRpdGlvbiBkaXJlY3RlIGRhbnMgbGVzIGNlbGx1bGVzIGFwcGFyYWl0IGRhbnMgbCdoaXN0b3JpcXVlIG1haXMgbmUgcGV1dCDDqnRyZSBleHBvcnTDqWUuICANCg0KLSBGYWNldHRlcyBldCBmaWx0cmVzIHMnZW5yZWdpc3RyZW50IGdyw6JjZSBhdSBgcGVybWFsaWVuYC4gIA0KDQo8L2JyPg0KDQoqKioNCg0KPC9icj4NCg0KIyA2LiBNZW51IGV0IGZvbmN0aW9ucyBkZSBiYXNlDQoNCk9wZW4gUmVmaW5lIHBlcm1ldCBkZSB0cmF2YWlsbGVyIGRlICoqZGV1eCBmYcOnb25zKio6ICANCg0KDQoxLiBBdmVjIGwnZW5zZW1ibGUgZGVzICoqZm9uY3Rpb25zIGF1dG9tYXRpc8OpZXMqKiBxdWUgbCdvbiByZXRyb3V2ZSBkYW5zIGxlcyBtZW51cy4NCg0KDQoyLiBBdmVjIGxlICoqbGFuZ2FnZSBHUkVMKiogcGVybWV0dGFudCBkZSByw6lkaWdlciBzZXMgcHJvcHJlcyBbZXhwcmVzc2lvbnMuXShodHRwczovL2RvY3Mub3BlbnJlZmluZS5vcmcvbWFudWFsL2V4cHJlc3Npb25zKS4gIA0KDQotIE3Dqm1lIGxvcnNxdWUgbCdvbiB1dGlsaXNlIGxlcyBmb25jdGlvbnMgYXV0b21hdGlzw6llcywgaWwgZXN0IHBvc3NpYmxlIGQnZW4gbW9kaWZpZXIgbGUgZm9uY3Rpb25uZW1lbnQgZW4gw6lkaXRhbnQgZGlyZWN0ZW1lbnQgbGEgc3ludGF4ZSBHUkVMIGNvcnJlc3BvbmRhbnRlLiANCg0KPC9icj4NCg0KIyMgNi4xLiBGb25jdGlvbnMgYXV0b21hdGlzw6llczoNCg0KLSBMZSBtZW51IGV0IGwnZW5zZW1ibGUgZGUgc2VzIGZvbmN0aW9ucyBhdXRvbWF0aXPDqWVzIGFwcGFyYWlzc2VudCBlbiBjbGlxdWFudCBzdXIgbGEgZmzDqGNoZSBkZSBsJ2ludGl0dWzDqSBkZSBjaGFxdWUgY29sb25uZS4NCg0KLSBMZXMgZm9uY3Rpb25zIGRpc3BvbmlibGVzIHNvdXMgbGUgbWVudSBkZSBsYSBwcmVtacOocmUgY29sb25uZSBgVG91dGVzYCBzZSBkaXN0aW5ndWVudCBkZXMgYXV0cmVzIHB1aXNxdSdlbGxlcyBwZXJtZXR0ZW50IGQnYXBwbGlxdWVyIGRlcyBmb25jdGlvbnMgw6AgbCdlbnNlbWJsZSBkZXMgY29sb25uZXMgZHUgZmljaGllcjogTWFycXVlciwgw6l0b2lsZXIsIHN1cHByaW1lciwgbWFzcXVlci4uLg0KDQo8L2JyPg0KDQojIyMjIE1lbnUgZXQgZm9uY3Rpb25zIGRlIGxhIGNvbG9ubmUgYFRvdXRlc2ANCg0KPC9icj4NCg0KIVtdKGltYWdlcy9PUjIxLmpwZyl7d2lkdGg9OTAlfQ0KDQo8L2JyPg0KDQojIyMjIE1lbnUgZXQgZm9uY3Rpb25zIGRlIGNoYXF1ZSBjb2xvbm5lLXZhcmlhYmxlDQoNCjwvYnI+DQoNCiFbXShpbWFnZXMvT1IxMi5qcGcpe3dpZHRoPTkwJX0NCg0KPC9icj4NCg0KKioqDQoNCiMjIDYuMi4gTGUgbGFuZ2FnZSBHUkVMDQoNCjwvYnI+DQoNCiFbXShpbWFnZXMvT1IxNC5qcGcpDQoNCjwvYnI+DQoNCkdSRUwgLSBFeHByZXNzaW9ucyBzaW1pbGFpcmVzIGF1eCBmb3JtdWxlcyBleGNlbCBtYWlzIHF1aSBzJ2FwcGxpcXVlbnQgYXV4IGNvbG9ubmVzLCBub24gYXV4IGNlbGx1bGVzLCBldCBxdWkgbmUgc29udCBwYXMgc3RvY2vDqWVzIMOgIG3Dqm1lIGxlcyBkb25uw6llcyBtYWlzIGRhbnMgdW4gc2NyaXB0LiAgDQoNCjwvYnI+DQoNCiMjIyBMZSBsYW5nYWdlIEdSRUwgcGV1dCBzJ3V0aWxpc2VyIGRlIGRpZmbDqXJlbnRlcyBmYcOnb25zOiAgDQoNCi0gRW4gY3LDqWFudCBkZXMgZmFjZXR0ZXMgcGVyc29ubmFsaXPDqWVzIDogYEZhY2V0dGUgLT4gRmFjZXR0ZSB0ZXh0dWVsbGUgcGVyc29ubmFsaXPDqWVgLiAgDQoNCi0gRW4gdHJhbnNmb3JtYW50IHVuZSBjb2xvbm5lOiBgw4lkaXRlciBsZXMgY2VsbHVsZXMgLT4gdHJhbnNmb3JtZXJgIChhdXNzaSBzb3VzIGBUb3V0ZXMgLT4gVHJhbnNmb3JtZXJgKS4gIA0KDQotIEVuIGNyw6lhbnQgdW5lIG5vdXZlbGxlIGNvbG9ubmU6IGDDiWRpdGVyIGxhIGNvbG9ubmUgLT4gQWpvdXRlciB1bmUgY29sb25uZSBiYXPDqWUgc3VyIGNldHRlIGNvbG9ubmVgLiAgDQoNCjwvYnI+DQoNCioqTGVzIGZpbHRyZXMgZXQgbGVzIHRyYW5zZm9ybWF0aW9ucyBwbHVzIGNvbXBsZXhlcyBwZXV2ZW50IGF1c3NpIG7DqWNlc3NpdGVyIGwndXNhZ2UgZCdbZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzIChyZWdleCldKGh0dHBzOi8vcmVnZXgxMDEuY29tLykqKg0KDQo8L2JyPg0KDQoqKioNCg0KPC9icj4NCg0KIyMgNi4zLiBUcmllciB1biBmaWNoaWVyDQoNCi0gTGVzIGRvbm7DqWVzIGFwcGFyYWlzc2VudCBkYW5zIGwnb3JkcmUgZHUgZmljaGllciBvcmlnaW5hbC4NCi0gUG91ciBtb2RpZmllciBsJ29yZHJlIGQnYXBwYXJpdGlvbiBkZXMgb2JzZXJ2YXRpb25zLCBhcHBsaXF1ZXIgdW4gb3UgZGVzIHRyaXMgc3VyIGxlcyBjb2xvbm5lcyBhdmVjIGBUcmllci4uLmANCi0gUG91ciBjb21iaW5lciBwbHVzaWV1cnMgdHJpcyBzdXIgZGlmZsOpcmVudGVzIGNvbG9ubmVzOiBGYWlyZSB1biB0cmllIHN1ciB1bmUgY29sb25uZSBwdWlzIHN1ciB1bmUgYXV0cmUgZW4gbW9kaWZpYW50IHNpIG7DqWNlc3NhaXJlIGwnb3B0aW9uIGBUcmllciBzZWxvbiBjZXR0ZSBzZXVsZSBjb2xvbm5lYC4NCi0gTGVzIHRyaXMgbmUgc29udCBxdWUgdGVtcG9yYWlyZXMgZXQgbidhZmZlY3RlbnQgZG9uYyBxdWUgbCdhZmZpY2hhZ2UuIFBvdXIgcXUnaWxzIHNvaWVudCBwZXJtYW5lbnRzIChyZW51bcOpcm90YXRpb24gZGVzIGxpZ25lcyk6IGBUcmllciAtPiBSZXRyaWVyIGxlcyBsaWduZXMgZGUgZmHDp29uIHBlcm1hbmVudGVgKi4gIA0KLSBJbCBlc3QgcG9zc2libGUgZGUgc3VwcHJpbWVyIGV0IGQnaW52ZXJzZXIgbGUgdHJpIMOgIHBhcnRpciBkZXMgb3B0aW9ucyBzdXIgY2hhcXVlIGNvbG9ubmUgb3UgZ3LDomNlIMOgIGxhIGZvbmN0aW9uIGBUcmllcmAgZHUgaGF1dC4gIA0KDQogKkxlIHRyaSBwZXJtYW5lbnQgYWZmZWN0ZSB0b3V0IGxlIGZpY2hpZXIsIHBhcyBzZXVsZW1lbnQgbGEgdnVlIGZpbHRyw6llLiAgDQoNCiFbXShpbWFnZXMvT1I2LmpwZykgDQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIFRyaWVyIGxlcyB2YWxldXJzIGRlIGxhIGNvbG9ubmUgYEpvdXIgY2FsZW5kYWlyZWAgZW4gYGRhdGUgYW50w6ljaHJvbm9sb2dpcXVlYC4gIA0KLSBRdWVsbGUgZXN0IGxhIGRlcm5pw6hyZSBkYXRlIGQnaW5jaWRlbnQgZW5yZWdpc3Ryw6llIGRhbnMgbGUgZmljaGllciA/ICANCi0gU3VwcHJpbWVyIGxlIHRyaS4gIA0KPC9kaXY+DQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KLSBUcmllciBsZXMgdmFsZXVycyBkZSBsYSBjb2xvbm5lIGBNb2lzIENhbGVuZHJpZXJgICANCi0gVHJpZXIgbGVzIHZhbGV1cnMgZGUgbGEgY29sb25uZSBgSm91ciBkdSBtb2lzYCAgDQotIEV4cGxvcmVyIGxlIHLDqXN1bHRhdC4uLiANCjwvZGl2Pg0KDQo8L2JyPg0KDQoqKioNCg0KPC9icj4NCg0KIyMgNi40LiBGaWx0cmVyIGxlIHRleHRlDQoNCi0gTGEgZm9uY3Rpb24gYEZpbHRyZXIgbGUgdGV4dGVgIHBlcm1ldCBkZSBjaGVyY2hlciB1bmUgb3UgZGVzIGNoYWluZXMgZGUgY2FyYWN0w6hyZXMgZGFucyB1bmUgb3UgcGx1c2lldXJzIHZhcmlhYmxlcy4gIA0KLSBQZXJtZXQgZGUgcmVjaGVyY2hlciBkZXMgY2hhaW5lcyBkZSBjYXJhY3TDqHJlcyBkYW5zIHVuZSBjb2xvbm5lIGV0IGRlIGNvbWJpbmVyIGRlcyBmaWx0cmVzIGFwcGxpcXXDqXMgc3VyIHBsdXNpZXVycyBjb2xvbm5lcyBwb3VyIHJhZmZpbmVyIGxhIHJlY2hlcmNoZS4gIA0KLSBGb25jdGlvbiBwbHVzIGV4cMOpZGl0aXZlIHF1ZSBsZXMgZmFjZXR0ZXMgcXVhbmQgb24gbmUgdmV1dCBxdWUgY2hlcmNoZXIgdW5lIGNoYWluZSBkZSBjYXJhY3TDqHJlcy4gIA0KLSBMJ2FmZmljaGFnZSBkZXMgbGlnbmVzIHNlIGxpbWl0ZXJhIGF1IG5vbWJyZSBkZSBjYXMgY29ycmVzcG9uZGFudHMgYXV4IGNyaXTDqHJlcyBkZSByZWNoZXJjaGUgaW5zY3JpdHMgZGFucyBsZXMgYm9pdGVzIGRlIGZpbHRyZXMuICANCi0gKipUYW50IHF1ZSBsZXMgZmlsdHJlcyBzZXJvbnQgYWN0aWZzLCBsZXMgYWN0aW9ucyBzdWJzw6lxdWVudGVzIHNlIGxpbWl0ZXJvbnQgw6AgY2VzIGNhcyBmaWx0csOpcy4qKiAgDQoNCiFbXShpbWFnZXMvT1I3LmpwZykgDQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIEZpbHRyZXIgbGUgdGV4dGUgc3VyIGxhIGNvbG9ubmUgKkNvZGUgZGUgbGlldSo6ICJiZXJyaSIgIA0KLSBGaWx0cmVyIGxlIHRleHRlIHN1ciBsYSBjb2xvbm5lICpIZXVyZSBkZSBsJ2luY2lkZW50KjogIjEyIiAgDQotIEV4cGxvcmVyIGxlcyByw6lzdWx0YXRzICANCi0gQ29tbWVudCBzJ2Fzc3VyZXIgZCdhdm9pciBzZXVsZW1lbnQgbGVzIGNhcyBzdXJ2ZW51cyBlbnRyZSAxMmggZXQgMTNoPyBDb21iaWVuIGRlIGxpZ25lcyBjb3JyZXNwb25kZW50IMOgIGNlcyBjb25kaXRpb25zPyANCi0gVG91dCBzdXBwcmltZXIgbGVzIGZpbHRyZXMuDQo8L2Rpdj4NCg0KPC9icj4NCg0KKioqDQoNCjwvYnI+DQoNCiMgNy4gTGVzIGZhY2V0dGVzDQoNCjxkaXYgY2xhc3MgPSAicmlnaHQiPg0KPGltZyBzcmM9ImltYWdlcy9PUjM0LmpwZyIgIHdpZHRoPSI2MCUiIC8+DQo8L2Rpdj4NCg0KLSBMZXMgZmFjZXR0ZXMgY29uc3RpdHVlbnQgbGEgbWFycXVlIGRlIGNvbW1lcmNlIGQnT3BlblJlZmluZSwgZCdvw7kgbGUgbG9nbyEgDQoNCi0gRm9uY3Rpb25uYWxpdMOpIHB1aXNzYW50ZSBxdWkgcGVybWV0IGQnZXhwbG9yZXIgZXQgZGUgZmlsdHJlciBzZXMgZG9ubsOpZXMgZW4gZm9uY3Rpb24gZGUgZGlmZsOpcmVudGVzIGNvbmRpdGlvbnMuICANCg0KLSBOJ2FmZmVjdGVudCBwYXMgZGlyZWN0ZW1lbnQgbGVzIGRvbm7DqWVzLCBzZXVsZW1lbnQgbGEgcHLDqXNlbnRhdGlvbi4gIA0KDQotIMOAIGxhIGJhc2UsIHVuZSBmYWNldHRlIGNvcnJlc3BvbmQgw6AgbGEgbGlzdGUgZGVzIHZhbGV1cnMgcG9zc2libGVzIGQndW5lIHZhcmlhYmxlICAoZXQgZGUgbGV1ciBvY2N1cnJlbmNlKSBwcsOpc2VudMOpZSBzZWxvbiBsZSBmb3JtYXQgKGNoYWluZSwgbnVtw6lyaXF1ZSwgZGF0ZSkuICANCg0KLSBQZXJtZXR0ZW50IHVuZSBleHBsb3JhdGlvbiBldCBtYW5pcHVsYXRpb24gZGVzIHZhbGV1cnMgcG9zc2libGVzIGV0IGRlIGxldXJzIGNhcyBjb3JyZXNwb25kYW50cyBwbHVzIMOpbGFib3LDqWVzIHF1ZSBsZXMgZmlsdHJlcy4gIA0KDQotIE9uIHBldXQgYWluc2kgaWRlbnRpZmllciBsZXMgdGVuZGFuY2VzLCBsZXMgcsOpZ3VsYXJpdMOpcywgbGVzIGVycmV1cnMsIGxlcyDDqWNhcnRzLCBsZXMgcsOpcMOpdGl0aW9ucyBldCAgY2libGVyIGxlcyB2YWxldXJzIGRlIHNvdXMtZ3JvdXBlcyBwcsOpY2lzLiAgDQoNCi0gQ2VzIHNvdXMtZ3JvdXBlcyBwZXV2ZW50IGVuc3VpdGUgw6p0cmUgw6lkaXTDqXMgZXQgZXhwb3J0w6lzIChib3V0b24gYEV4cG9ydGVyYCBlbiBoYXV0IMOgIGRyb2l0ZSkuIA0KDQo8L2JyPg0KDQojIyMgRGV1eCB0eXBlcyBkZSBmYWNldHRlczoNCg0KICAtIFsxXSBMZXMgZmFjZXR0ZXMgYXV0b21hdGlzw6llcy4gDQogIDwvYnI+DQogIC0gWzJdIExlcyBmYWNldHRlcyBwZXJzb25uYWxpc8OpZXMuDQogIDwvYnI+DQogIC0gWzNdIElsIGVzdCBhdXNzaSBwb3NzaWJsZSBkZSBjcsOpZXIgc2VzIHByb3ByZXMgZmFjZXR0ZXMgZ3LDomNlIGF1IGxhbmdhZ2UgR1JFTCBwb3VyIGTDqWZpbmlyIGRlcyBjb25kaXRpb25zIGRlIHPDqWxlY3Rpb24vZmlsdHJlIHRyw6hzIHByw6ljaXNlcyAob24gcGFybGUgZW5jb3JlIGljaSBkZSBgZmFjZXR0ZXMgcGVyc29ubmFsaXPDqWVzYCwgbWFpcyBlbGxlcyBkb2l2ZW50IMOqdHJlIHLDqWRpZ8OpZXMgbWFudWVsbGVtZW50KS4NCg0KPC9icj4NCg0KIyMjIFRyb2lzIGZvcm1hdHMgZGUgZmFjZXR0ZXM6DQoNCk9uIHJldHJvdXZlIMOpZ2FsZW1lbnQgZGlmZsOpcmVudHMgKipmb3JtYXRzIGRlIGZhY2V0dGVzKiogLT4gdW5lIHBvdXIgY2hhcXVlIGZvcm1hdCBkZSBkb25uw6llcyAgDQoNCjEuIGBGYWNldHRlIHRleHR1ZWxsZWAgWzQtNV0gIA0KDQoyLiBgRmFjZXR0ZSBudW3DqXJpcXVlYCAgWzddICANCg0KMy4gYEZhY2V0dGUgY2hyb25vbG9naXF1ZWAgWzZdICANCg0KLSBMZXMgZmFjZXR0ZXMgcGVyc29ubmFsaXPDqWVzIHByb3Bvc2VudCBhdXNzaSBkZXMgZmFjZXR0ZXMgYm9vbMOpZW5uZXMuICANCg0KPC9icj4NCg0KPGNlbnRlcj4gIA0KDQohW10oaW1hZ2VzL09SMjMuanBnKQ0KPC9jZW50ZXI+ICANCg0KLSAqKls4XSoqIExlIGxpZW4gYGNoYW5nZXJgIHBlcm1ldCBkJ291dnJpciB1bmUgZmVuw6p0cmUgZCfDqWRpdGlvbiBHUkVMIHBvdXIgbW9kaWZpZXIgbGEgc3ludGF4ZSBkZSBsYSBmYWNldHRlLiAgDQotICoqWzldKiogUG91ciBzdXBwcmltZXIgbGVzIGZhY2V0dGVzLCBjbGlxdWVyIHN1ciBsZSB4IGRlIGNoYXF1ZSBmZW7DqnRyZSBvdSBgVG91dCBzdXBwcmltZXJgLiAgDQotIFBvdXIgY29uc2VydmVyIGxlcyBmZW7DqnRyZXMgbWFpcyBzdXBwcmltZXIgbGVzIHPDqWxlY3Rpb25zIHF1aSB5IG9udCDDqXTDqSBmYWl0ZXMsIGNsaXF1ZXIgc3VyIGByw6lpbnRpYWxpc2VyYCBzdXIgY2hhcXVlIGZlbsOqdHJlIG91IGBUb3V0IHLDqWluaXRpYWxpc2VyYCAqKls5XSoqLiAgDQotICoqWzEwXSoqIE9wdGlvbiBgR3JvdXBlYDogT3V0aWxzIHByb3Bvc2FudCBkaWZmw6lyZW50cyBhbGdvcml0aG1lcyBkZSBzaW1pbGFyaXTDqSBwZXJtZXR0YW50IGRlIHJlZ3JvdXBlciBkZXMgY2F0w6lnb3JpZXMgc2VtYmxhYmxlcy4gIA0KDQo8L2JyPg0KDQojIyMjIDEuIEZhY2V0dGUgdGV4dHVlbGxlIFs0LTVdIA0KDQotIFR5cGUgZGUgZmFjZXR0ZSBsZSBwbHVzIHNvdXZlbnQgdXRpbGlzw6kuICANCg0KLSBSZWdyb3VwZW50IGRhbnMgbGEgZmVuw6p0cmUgZGUgZ2F1Y2hlIGxlcyB2YWxldXJzIGRpc3RpbmN0ZXMgKHRleHR1ZWxsZXMgb3UgbnVtw6lyaXF1ZXMpIGRlcyBjb2xvbm5lcyB2b3VsdWVzLiAgDQogIC0gT24gcGV1dCBmYWlyZSB1bmUgZmFjZXR0ZSB0ZXh0dWVsbGUgc3VyIHVuZSBjb2xvbm5lIG51bcOpcmlxdWUgbWFpcyBwYXMgbCdpbnZlcnNlLiAgDQogIC0gMjAwMCB2YWxldXJzIG1heGltdW0gcGFyIGTDqWZhdXQgbWFpcyBwZXV0IMOqdHJlIG1vZGlmacOpIGRhbnMgbGVzIHByw6lmw6lyZW5jZXMuIFNpIGxlcyB2YWxldXJzIHNvbnQgdHJvcCBub21icmV1c2VzLCBlbGxlcyBuZSBzZXJvbnQgcGFzIGxpc3TDqWVzICh1biBmaWx0cmUgcG91cnJhaXQgw6p0cmUgdXRpbGlzw6kpLiANCiAgDQotIFBlcm1ldHRlbnQgZGUgY29tYmluZXIgZGlmZsOpcmVudHMgZmlsdHJlcyBlbiBzw6lsZWN0aW9ubmFudCBkaWZmw6lyZW50ZXMgdmFsZXVycyBkJ3VuZSBvdSBwbHVzaWV1cnMgdmFyaWFibGVzIChldCBsZXVycyBjYXMgY29ycmVzcG9uZGFudHMpLiAgDQogIC0gQ2xpcXVlciBgaW5jbHVyZWAgb3UgYGV4Y2x1cmVgIHBvdXIgc8OpbGVjdGlvbm5lciBvdSBzdXBwcmltZXIgZGVzIGNob2l4IG11bHRpcGxlcyAqKlsxMl0qKi4gIA0KICAtIFVuZSBmb2lzIGxhIHPDqWxlY3Rpb24gZmFpdGUsIGwnb3B0aW9uIGBpbnZlcnNlcmAgcGVybWV0IGRlIHPDqWxlY3Rpb25uZXIgdG91dCBTQVVGIGxhIHPDqWxlY3Rpb24gKipbMTFdKiouICANCiAgLSBQZXV2ZW50IMOqdHJlIHRyacOpZXMgc2Vsb24gbGUgbm9tIG91IGxlIGNvbXB0ZSAobm9tYnJlIGQnb2NjdXJyZW5jZXMpLiAgDQotIFBlcm1ldHRlbnQgKipk4oCZw6lkaXRlciBsZXMgdmFsZXVycyoqIChjb250ZW51IGRlIGNoYXF1ZSBjZWxsdWxlIGNvcnJlc3BvbmRhbnRlKSAqKlsxM10qKi4gIA0KDQo8L2JyPg0KDQojIyMjIDIuIEZhY2V0dGUgbnVtw6lyaXF1ZSBbN10NCg0KLSBWaXN1YWxpc2VyIGV0IHPDqWxlY3Rpb25uZXIgbGVzIHZhbGV1cnMgZOKAmXVuZSB2YXJpYWJsZSBudW3DqXJpcXVlIGFsbGFudCBkZSBsYSBwbHVzIHBldGl0ZSDDoCBsYSBwbHVzIGdyYW5kZS4gIA0KDQo8L2JyPg0KDQojIyMjIDMuIEZhY2V0dGUgY2hyb25vbG9naXF1ZSBbNl0NCg0KLSBWaXN1YWxpc2VyIGV0IHPDqWxlY3Rpb25uZXIgbGVzIHZhbGV1cnMgZOKAmXVuZSBjb2xvbm5lIGRhdGUgZW4gbGlnbmUgZHUgdGVtcHMuICANCg0KDQoNCjwvYnI+DQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNCioqRmlsdHJlcioqIA0KDQotIEV4cGxvcmVyIGxlcyB2YWxldXJzIGRlIGxhIHZhcmlhYmxlICpDYXVzZSBwcmltYWlyZSouIFF1ZWxsZSBlc3QgbGEgZGV1eGnDqG1lIHBsdXMgZnLDqXF1ZW50ZT8gDQotIFF1ZWxsZXMgc29udCBsZXMgY2F0w6lnb3JpZXMgZGUgKkNhdXNlIHNlY29uZGFpcmUqIHJlbGnDqWVzIMOgIGxhICpDYXVzZSBwcmltYWlyZSAiQ2xpZW50w6hsZSIqPyAgIA0KLSBRdWVsbGUgZXN0IGxhIHBsdXMgZnLDqXF1ZW50ZT8gU8OpbGVjdGlvbm5lciBjZXR0ZSB2YWxldXIuIENvbWJpZW4gZGUgY2FzIGNvcnJlc3BvbmRlbnQgw6AgY2V0dGUgc8OpbGVjdGlvbj8gIA0KLSDDgCBxdWVsICpqb3VyIGRlIGxhIHNlbWFpbmUqIGNldHRlIGNhdXNlIGVzdC1lbGxlIHN1cnZlbnVlIGxlIHBsdXMgc291dmVudD8gIA0KLSBSw6lpbml0aWFsaXNlciB0b3V0ZXMgbGVzIGZhY2V0dGVzLg0KDQoqKsOJZGl0ZXIqKiAgDQoNCi0gRGFucyBsYSBmYWNldHRlICpDYXVzZSBwcmltYWlyZSosIHJlbm9tbWVyIGxhIHZhbGV1ciAjTkQgLT4gTkEuICANCi0gQ29ycmlnZXIgbGEgdmFsZXVyICJhdXRyZSIgcG91ciBxdSdlbGxlIHNvaXQgZnVzaW9ubsOpZSDDoCBsYSB2YWxldXIgIkF1dHJlcyIuICANCi0gU3VwcHJpbWVyIHRvdXRlcyBsZXMgZmFjZXR0ZXMuDQo8L2Rpdj4NCg0KPC9icj4NCg0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KKipGaWx0cmVyKiogDQoNCi0gUXVlbCBlc3QgbGUgKnN5bXB0b21lKiBsZSBwbHVzIGZyw6lxdWVudD8gU8OpbGVjdGlvbm5lciBjZXR0ZSB2YWxldXIuICANCi0gU3VyIHF1ZWxsZSAqTGlnbmUqIGNlICpzeW1wdG9tZSogcydlc3QgcHJvZHVpdCBsZSBwbHVzIHNvdXZlbnQ/IFPDqWxlY3Rpb25uZXIgY2V0dGUgdmFsZXVyLiAgDQotIENlcyDDqXbDqW5lbWVudHMgb250LWlscyBuw6ljZXNzaXTDqSB1bmUgKsOpdmFjdWF0aW9uKj8gIA0KDQoqKsOJZGl0ZXIqKiAgDQotIMOJZGl0ZXIgbGEgdmFyaWFibGUgKsOpdmFjdWF0aW9uKiBkZSBmYcOnb24gw6AgY2UgcXUnaWwgbid5IGFpdCBxdWUgKipkZXV4IHZhbGV1cnMqKiBwb3NzaWJsZXM6IE91aSBldCBOb24uICANCjwvZGl2Pg0KDQoqKioNCg0KPC9icj4NCg0KIyA4LiBMZXMgcmVncm91cGVtZW50cyAoY2x1c3RlcmluZykNCg0KLSBGb25jdGlvbiBxdWkgcGVybWV0IGQnaWRlbnRpZmllciBkYW5zIHVuZSBjb2xvbm5lIGxlcyB2YWxldXJzIGRpc3RpbmN0ZXMgcXVpIHBvdXJyYWllbnQgYXZvaXIgbGEgbcOqbWUgc2lnbmlmaWNhdGlvbiBvdSBxdWkgcG91cnJhaWVudCDDqnRyZSByZWdyb3Vww6llcyBkYW5zIHVuZSBtw6ptZSBjYXTDqWdvcmllID0gInZhcmlhdGlvbnMgc3VyIGxlIG3Dqm1lIHRow6htZSIgw6l2YWx1w6llcyBlbiBmb25jdGlvbiBkZSBbZGlmZsOpcmVudHMgYWxnb3JpdGhtZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9PcGVuUmVmaW5lL09wZW5SZWZpbmUvd2lraS9DbHVzdGVyaW5nLUluLURlcHRoKS4gDQoNCi0gQ2hhcXVlIHN1Z2dlc3Rpb24gZG9pdCDDqnRyZSBhcHByb3V2w6llIGluZGl2aWR1ZWxsZW1lbnQgcG91ciBxdWUgbGVzIG1vZGlmaWNhdGlvbnMgcydhcHBsaXF1ZW50IChsZXMgcmVncm91cGVtZW50cyBwcm9wb3PDqXMgbmUgc29udCBwYXMgbsOpY2Vzc2FpcmVtZW50IHBlcnRpbmVudHMpLg0KDQotIE9wZW5SZWZpbmUgcHJvcG9zZSBkZXMgKmNsdXN0ZXJzKiBzZWxvbiBkaWZmw6lyZW50ZXMgbcOpdGhvZGVzIHBsdXMgb3UgbW9pbnMgw6lsYWJvcsOpZXMgKCpQcm9jaGUgdm9pc2luKiBwcmVuZCBwbHVzIGRlIG3DqW1vaXJlKSBxdWkgcGVybWV0dGVudCBkZSByZWdyb3VwZXIgbGVzIHZhbGV1cnMgc2ltaWxhaXJlcyBldCBwcm9wb3NlbnQgZGVzIG1hdGNocyBwb3NzaWJsZXMgKCpmdXp6eSBtYXRjaGluZyopOiBwYXIgZXhlbXBsZSAqZW1wcmVpbnRlKiBlc3QgcGx1cyBjb25zZXJ2YXRldXIgKGRpc3Rpbmd1ZSBjYXNzZSwgZXNwYWNlcywgb3JkcmUsIHLDqXDDqXRpdGlvbiwgcG9uY3R1YXRpb24uLi4pLCAqbmdyYW0qIGVzdCBwbHVzIGZsZXhpYmxlIChtw6ptZXMgY2FyYWN0w6hyZXMpLCAqTWV0YXBob25lMyogZXN0IGxlIHBsdXMgImxpYsOpcmFsIiAobcOqbWUgcHJvbm9uY2lhdGlvbikuDQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIENyw6llciB1bmUgZmFjZXR0ZSB0ZXh0dWVsbGUgc3VyIGxhIGNvbG9ubmUgKkNvZGUgZGUgbGlldSouICANCi0gQ2xpcXVlciBzdXIgYEdyb3VwZWAgZXQgZXhwbG9yZXIgbGVzIHJlZ3JvdXBlbWVudHMgZW4gZm9uY3Rpb24gZGVzIGRpZmbDqXJlbnRzIGFsZ29yaXRobWVzLiAgDQo8L2Rpdj4NCg0KKioqDQoNCjwvYnI+DQoNCiMgOS4gR1JFTCBldCBsZXMgZmFjZXR0ZXMgcGVyc29ubmFsaXPDqWVzIA0KDQoNCi0gRm9uY3Rpb25uZW50IGNvbW1lIGRlcyBmYWNldHRlcyBhdXRvbWF0aXPDqWVzIHNhdWYgcXUnb24gbmUgcGV1dCDDqWRpdGVyIGVuIGZvbmN0aW9uIGRlIGNlcyByw6lzdWx0YXRzIGNhciBlbGxlcyBwcsOpc2VudGVudCBkZXMgZG9ubsOpZXMgbW9kaWZpw6llcyBlbiBtw6ltb2lyZS4NCg0KLSBPbnQgw6l0w6kgZMOpdmVsb3Bww6llcyBldCBhdXRvbWF0aXPDqWVzIGFmaW4gZCdleHBsb3JlciBkZXMgYXNwZWN0cyBwcsOpY2lzIGRlcyBkb25uw6llcyBzYW5zIGF2b2lyIMOgIGxlcyAgcsOpZGlnZXIgZW4gc3ludGF4ZSBHUkVMOiANCg0KICAtIGBGYWNldHRlIHBhciBtb3RgIDogRGl2aXNlIGNoYXF1ZSBtb3QgKHPDqXBhcsOpIGQndW4gZXNwYWNlKSBkJ3VuZSBjb2xvbm5lIGV0IGxlcyBwcsOpc2VudGUgZW4gbGlzdGUgZGUgdmFsZXVycyBkaXN0aW5jdGVzIFt2YWx1ZS5zcGxpdCgiICIpXS4NCiAgDQogIC0gYEZhY2V0dGUgZG91YmxvbnNgOiB2YWxldXJzIGJvb2zDqWVubmVzIGluZGlxdWFudCBzaSBsZXMgdmFsZXVycyBzb250IHVuaXF1ZXMgKGZhbHNlKSBvdSBub24gKHRydWUpIFtmYWNldENvdW50KHZhbHVlLCAndmFsdWUnLCAnU3ltcHRvbWUnKSA+IDFdLiAgDQogIA0KICAtIGBGYWNldHRlcyBsb2dhcml0aG1pcXVlc2A6IG1vZGlmaWNhdGlvbiBsb2dhcml0aG1pcXVlIGRlIHZhbGV1cnMgbnVtw6lyaXF1ZXMgW3ZhbHVlLmxvZygpXS4NCiAgDQogIC0gYEZhY2V0dGUgbG9uZ3VldXIgZGUgdGV4dGVgOiBsaXN0ZSBsZSBub21icmUgZGUgY2FyYWN0w6hyZXMgZHUgY29udGVudSBkZXMgY2VsbHVsZXMgZCd1bmUgY29sb25uZSBbdmFsdWUubGVuZ3RoKCldLg0KICANCiAgLSBGYWNldHRlcyBwZXJtZXR0YW50IGQnZXhwbG9yZXIgbGVzIHZhbGV1cnMgZCdgZXJyZXVyYCwgYG51bGxlc2AsIGB2aWRlc2AuLi4gW2lzRW1wdHlTdHJpbmcodmFsdWUpXQ0KDQoqKiogDQoNCjwvYnI+DQoNCiMjIyBHUkVMIC0gcHJpbmNpcGVzIGRlIGJhc2UgIA0KDQotICpHb29nbGUgUmVmaW5lIEV4cHJlc3Npb24gTGFuZ3VhZ2UqIA0KLSBMYW5nYWdlIHNpbWlsYWlyZSDDoCBqYXZhc2NyaXB0IGV0IGZvcm11bGVzIGV4Y2VsLiAgICANCi0gUGVybWV0IGxhIHLDqWRhY3Rpb24gZCdleHByZXNzaW9ucyB2aXNhbnQgw6AgbWFuaXB1bGVyL3RyYW5zZm9ybWVyIGxlIGNvbnRlbnUgZGVzIGNlbGx1bGVzIGQndW5lIGNvbG9ubmUuICANCihWb2lyIGxhIFtkb2N1bWVudGF0aW9uIG9mZmljaWVsbGVdKGh0dHBzOi8vZG9jcy5vcGVucmVmaW5lLm9yZy9tYW51YWwvZ3JlbCkgcG91ciBwbHVzIGRlIGTDqXRhaWxzKSAgDQotIExhbmdhZ2UgY29tcG9zw6kgZGUgW2ZvbmN0aW9uc10oaHR0cHM6Ly9kb2NzLm9wZW5yZWZpbmUub3JnL21hbnVhbC9ncmVsZnVuY3Rpb25zKSBldCBkJ1tvYmpldHNdKGh0dHBzOi8vZG9jcy5vcGVucmVmaW5lLm9yZy9tYW51YWwvZXhwcmVzc2lvbnMjdmFyaWFibGVzKS4NCg0KPC9icj4NCg0KIyMjIyBVdGlsaXNlIHVuZSBzeW50YXhlIHBhcnRpY3VsacOocmUgcG91ciBjaWJsZXIgbGVzIG9iamV0cyAodmFyaWFibGVzKTogIA0KLSBDb250ZW51IGRlIGNvbG9ubmUgYWN0dWVsbGU6IGB2YWx1ZWAuICAgICANCi0gQ29udGVudSBkJ3VuZSBhdXRyZSBjb2xvbm5lOiBgY2VsbHNbJ25vbS1jb2xvbm5lJ10udmFsdWVgLiAgICANCi0gQ29udGVudSB0ZXh0dWVsOiAiZ3VpbGxlbWV0IHNpbXBsZSBvdSBkb3VibGUiLiAgICANCg0KPC9icj4NCg0KIyMjIyBEZXV4IGZvcm1hdHMgZGUgbm90YXRpb246ICANCi0gSW1icmlxdcOpZTogKHRyaW0odG9Mb3dlcmNhc2UodmFsdWUpKS4gICAgDQotICoqU8OpcXVlbnRpZWxsZSoqOiB2YWx1ZS50b0xvd2VyY2FzZSgpLnRyaW0oKSAocGx1cyBmYWNpbGUgw6AgbGlyZSkuICAgIA0KDQo8L2JyPg0KDQojIyMjIERpZmbDqXJlbnRzIHR5cGVzIGRlIGZvbmN0aW9uczogIA0KLSBMZXMgZm9uY3Rpb25zIGV0IGxldXIgY29tcG9ydGVtZW50IGTDqXBlbmRyb250IGR1IHR5cGUgZGUgZG9ubsOpZXMgbWFuaXB1bMOpZXMuICANCi0gW0NlcnRhaW5lcyBmb25jdGlvbnNdKGh0dHBzOi8vZG9jcy5vcGVucmVmaW5lLm9yZy9tYW51YWwvZ3JlbGZ1bmN0aW9ucyNzbGljZWEtbi1mcm9tLW4tdG8tb3B0aW9uYWwpIHBlcm1ldHRlbnQgZGUgdHJhbnNmb3JtZXIgbGUgY29udGVudSBkZSBjZWxsdWxlcyBlbiBgYXJyYXlzYCAobGlzdGUgZCfDqWzDqW1lbnRzKSBldCBkZSBsZXMgbWFuaXB1bGVyLiAgDQotIFtDZXJ0YWluZXMgZm9uY3Rpb25zXShodHRwczovL2RvY3Mub3BlbnJlZmluZS5vcmcvbWFudWFsL2V4cHJlc3Npb25zI3JlZ3VsYXItZXhwcmVzc2lvbnMpIHBlcm1ldHRlbnQgZCd1dGlsaXNlciBsZXMgW2V4cHJlc3Npb25zIHLDqWd1bGnDqHJlc10oI2V4cHJlc3Npb24pLiAgDQoNCjwvYnI+DQoNClNlbG9uIGxlIGZvcm1hdCwgZGlmZsOpcmVudHMgdHlwZXMgZCcqKm9ww6lyYXRldXJzKiogcGV1dmVudCDDqnRyZSB1dGlsaXPDqXMgZW50cmUgbGVzIHZhbGV1cnM6ICANCgktIE9ww6lyYXRldXJzIGFyaXRobcOpdGlxdWVzOiArLCAtLCAqLCAvICANCgktIE9ww6lyYXRldXJzIGJvb2zDqWVuczogPT0sID4sIDwgIA0KICANClBhciBleGVtcGxlOg0KDQotIExlICIrIiBlbnRyZSBkZXV4IGNvbnRlbnVzIG51bcOpcmlxdWVzID0gc29tbWUNCg0KIVtdKGltYWdlcy9PUjMwLmpwZykNCg0KLSBMZSAiKyIgYXZlYyB1biBjb250ZW51IHRleHR1ZWwgPSBjb25jYXTDqW5hdGlvbg0KDQohW10oaW1hZ2VzL09SMzEuanBnKQ0KDQo8L2JyPg0KDQotIENoYXF1ZSBjYXJhY3TDqHJlIGNvbXBvc2FudCB1bmUgdmFsZXVyIGVzdCBvcmRvbm7DqSBkYW5zIHVuIGluZGV4ICoqw6AgcGFydGlyIGRlIDAqKiAoMWVyIMOpbMOpbWVudCkgZXQgcGV1dCDDqnRyZSBjaWJsw6kgZ3LDomNlIGF1eCBgWyBdYC4NCi0gRGUgbGEgbcOqbWUgZmHDp29uLCBjaGFxdWUgw6lsw6ltZW50IGQndW4gKmFycmF5KiBlc3Qgb3Jkb25uw6kgZGFucyB1biBpbmRleCAqKsOgIHBhcnRpciBkZSAwKiogKDFlciDDqWzDqW1lbnQpIGV0IHBldXQgw6p0cmUgY2libMOpIGdyw6JjZSBhdXggYFsgXWAuICANCg0KPiBgdmFsdWUuc3BsaXQoIigiKVsxXWAgLT4gTW9udHLDqWFsIChRdcOpYmVjKSA9ID8gIA0KPiBgdmFsdWUuc3BsaXQoIigiKVsxXS5zcGxpdCgiKSIpWzBdYCAtPiBNb250csOpYWwgKFF1w6liZWMpID0gPyAgDQoNCjwvYnI+DQoNCg0KIVtdKGltYWdlcy9PUjI1LmpwZykNCg0KPC9icj4NCg0Kw4lkaXRlciBsZXMgY2VsbHVsZXMgLT4gVHJhbnNmb3JtZXIgLT4gYHZhbHVlLnNwbGl0KCI7ICIpLnNvcnQoKS5qb2luKCI7ICIpYCANCg0KIVtdKGltYWdlcy9PUjI2LmpwZykNCg0KLSBzcGxpdCgpOiBkaXZpc2UgbGEgY2VsbHVsZSBlbiDDqWzDqW1lbnRzIGRpc3RpbmN0cyBzdXIgbGEgYmFzZSBkdSBzw6lwYXJhdGV1ciA7DQotIHNvcnQoKTogdHJpIGxlcyDDqWzDqW1lbnRzDQotIGpvaW4oKTogbGVzIGpvaW50cyBhdmVjIGxlIHPDqXBhcmF0ZXVyIDsNCg0KPC9icj4NCg0Kw4lkaXRlciBsZXMgY2VsbHVsZXMgLT4gVHJhbnNmb3JtZXIgLT4gYHZhbHVlLnNwbGl0KCI7ICIpLnNsaWNlKDEpLmpvaW4oIjsgIilgIA0KDQohW10oaW1hZ2VzL09SMjcuanBnKQ0KDQotIEljaSBsYSBmb25jdGlvbiBgc2xpY2UoKWAgY29uc2VydmUgbGVzIMOpbMOpbWVudHMgw6AgcGFydGlyIGRlIGwnw6lsw6ltZW50IGVuIHBvc2l0aW9uIDEgZG9uYyBzdXBwcmltZSBsZSAwLiANCg0KDQo8L2JyPg0KDQoNCiFbXShpbWFnZXMvT1IyOC5qcGcpDQoNCjwvYnI+DQoNCsOJZGl0ZXIgbGVzIGNlbGx1bGVzIC0+IFRyYW5zZm9ybWVyIC0+IGB2YWx1ZS5zcGxpdCgvXG4vKS5zbGljZSgxKS5qb2luKCI7ICIpYCANCg0KIVtdKGltYWdlcy9PUjI5LmpwZykNCg0KPC9icj4NCg0KIyMgRXhlcmNpY2UNCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCg0KQ3LDqWVyIHVuZSBmYWNldHRlIHN1ciBsYSBjb2xvbm5lICpDb2RlIGRlIGxpZXUqIHBvdXIgaWRlbnRpZmllciBsZXMgY2FzIGRvbnQgbGEgdmFsZXVyIGNvbW1lbmNlIHBhciAiQ8O0dGUiICANCg0KYHZhbHVlLnN0YXJ0c1dpdGgo4oCcQ8O0dGXigJ0pYCAgICANCg0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNCkNyw6llciB1bmUgZmFjZXR0ZSBwb3VyIGlkZW50aWZpZXIgbGVzIGNhcyBkb250IGxhIHZhbGV1ciBkYW5zIGxhIGNvbG9ubmUgKkNhdXNlIHByaW1haXJlKiBlc3QgbGEgbcOqbWUgcXVlIGRhbnMgbGEgY29sb25uZSAqQ2F1c2Ugc2Vjb25kYWlyZSoNCg0KYHZhbHVlID09IGNlbGxzWyJDYXVzZSBzZWNvbmRhaXJlIl0udmFsdWVgICAgDQoNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KDQpDcsOpZXIgdW5lIGZhY2V0dGUgcG91ciBsaXN0ZXIgbGVzIGNhcyBzZWxvbiBsJypoZXVyZSBkZSBsJ2luY2lkZW50KiBzZXVsZW1lbnQsIHNhbnMgbGVzIG1pbnV0ZXMgKDIgcHJlbWllcnMgY2FyYWN0w6hyZXMpLiBDb21tZW50IGZhaXJlIGFmZmljaGVyIGxlcyBtaW51dGVzIHNldWxlbWVudD9eW3ZhbHVlWzMsNV0gb3UgdmFsdWUuc3Vic3RyaW5nKDMpXSANCg0KYHZhbHVlWzAsMl1gICAgDQoNCg0KPC9kaXY+DQoNCjwvYnI+DQoNCg0KKioqDQoNCjwvYnI+DQoNCiMgMTAuICBUcmFuc2Zvcm1hdGlvbnMNCg0KLSBPcGVuUmVmaW5lIHBlcm1ldCBkJ2V4cGxvcmVyIG1haXMgYXVzc2kgZGUgbW9kaWZpZXIgc2VzIGRvbm7DqWVzIHNhbnMgYXZvaXIgw6AgdG91Y2hlciBhdSBjb250ZW51IGRlIGNlbGx1bGVzIG1hbnVlbGxlbWVudC4gIA0KDQotIENvbW1lIHBvdXIgbGVzIGZhY2V0dGVzLCBsZXMgZm9uY3Rpb25zIGRlIHRyYW5zZm9ybWF0aW9uIHBldXZlbnQgc2UgZmFpcmUgZGUgZGV1eCBmYcOnb25zOiAgICANCg0KICAxLiBUcmFuc2Zvcm1hdGlvbnMgYXV0b21hdGlzw6llcyAoYFRyYW5zZm9ybWF0aW9ucyBjb3VyYW50ZXNgKSAqKlsyXSoqOiBmb25jdGlvbnMgcGVybWV0dGFudCBkJ2FwcGxpcXVlciBkZXMgbW9kaWZpY2F0aW9ucyBjb3VyYW50ZXMgc3VyIGxlIGZvcm1hdCBldCBsYSBzdHJ1Y3R1cmUgZGVzIGNlbGx1bGVzL2NvbG9ubmVzLiAgDQogIA0KICAyLiBUcmFuc2Zvcm1hdGlvbnMgbWFudWVsbGVzIGRhbnMgbGEgZmVuw6p0cmUgR1JFTCAqKlsxXSoqIGFmaW4gZCdhbGxlciBiZWF1Y291cCBwbHVzIGxvaW4uICANCiAgDQoNCiFbXShpbWFnZXMvT1IyNC5qcGcpDQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAibm90ZSI+DQpQb3VyIHZvaXIgbGEgc3ludGF4ZSBjb3JyZXNwb25kYW50IMOgIGNoYXF1ZSBmb25jdGlvbiBkZSBgdHJhbnNmb3JtYXRpb25zIGNvdXJhbnRlc2AsIGFwcGxpcXVlciBsYSBmb25jdGlvbiBzdXIgdW5lIGNvbG9ubmUgcHVpcyBhbGxlciB2b2lyIGwnaGlzdG9yaXF1ZS4gUGFyIGV4ZW1wbGU6IGB2YWx1ZS50b051bWJlcigpYCwgYHZhbHVlLnRvVGl0bGVjYXNlKClgLCBgdmFsdWUudG9OdW1iZXIoKWAsIGB2YWx1ZS50b1VwcGVyY2FzZSgpYCwgYHZhbHVlLnRyaW0oKWAuLi4gPC9kaXY+DQoNCioqKg0KDQojIyAxMC4xIENyw6llciBldCBjb3BpZXIgZGVzIGNvbG9ubmVzDQoNCjwvYnI+DQoNCmDDiWRpdGVyIGxhIGNvbG9ubmUgLT4gQWpvdXRlciB1bmUgY29sb25uZSBlbiBmb25jdGlvbiBkZSBjZXR0ZSBjb2xvbm5lYA0KDQohW10oaW1hZ2VzL09SMzIuanBnKQ0KDQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQpDcsOpZXIgdW5lIG5vdXZlbGxlIGNvbG9ubmUgc3VyIGxhIGJhc2UgZGUgbGEgY29sb25uZSAqSm91ciBkZSBsYSBzZW1haW5lKiBpbmRpcXVhbnQgc2kgbGUgam91ciBlc3QgZW4gc2VtYWluZSBvdSBmaW4gZGUgc2VtYWluZS4NCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCmBpZih2YWx1ZSA+IDUsImZpbiBkZSBzZW1haW5lIiwic2VtYWluZSIpYA0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQpDcsOpZXIgdW5lIGNvbG9ubmUgw6AgcGFydGlyIGRlIGxhIGNvbG9ubmUgKmhldXJlIGRlIGwnaW5jaWRlbnQqIGVuIG5lIGNvbnNlcnZhbnQgcXVlIGwnaGV1cmUsIHNhbnMgbGVzIG1pbnV0ZXMsIGV0IHJham91dGVyIGxhIGxldHRyZSBoIHBvdXIgZG9ubmVyIHBhciBleGVtcGxlIGNlY2k6IDE1OjEyICAtPiAgMTVoLiAgDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQpgdmFsdWUuc3BsaXQoJzonKVswXSArICJoImAuICANCg0KT3UNCg0KYHZhbHVlLnNwbGl0QnlMZW5ndGhzKDIpWzBdYC4gIA0KPC9kaXY+DQoNCjwvYnI+DQoNCioqKiANCg0KPC9icj4NCg0KIyMgMTAuMi4gRGl2aXNlciBsZSBjb250ZW51IGRlIGNlbGx1bGVzIG11bHRpdmFyacOpZXMNCg0KLSAqKkRldXggb3B0aW9uczogKiogIA0KICAxLiBFbiBkaXZpc2FudCBsZSBjb250ZW51IGRlcyBjZWxsdWxlcyBlbiAqKnBsdXNpZXVycyBjb2xvbm5lcyoqOiBgw4lkaXRlciBsYSBjb2xvbm5lIC0+IERpdmlzZXIgZW4gcGx1c2lldXJzIGNvbG9ubmVzYCAgDQogIDIuIEVuIGRpdmlzYW50IGxlIGNvbnRlbnUgc3VyICoqcGx1c2lldXJzIGxpZ25lcyoqOiBgw4lkaXRlciBsZXMgY2VsbHVsZXMgLT4gRGl2aXNlciBsZXMgY2VsbHVsZXMgbXVsdGl2YXJpw6llc2AgIA0KDQo8L2JyPg0KDQohW10oaW1hZ2VzL09SMzcuanBnKSAgDQoNCi0gTGEgcHJlbWnDqHJlIG9wdGlvbiBlc3QgbGEgcGx1cyBmcsOpcXVlbnRlLiANCi0gTGEgZGV1eGnDqG1lIG9wdGlvbiBhdXJhIHVuIGVmZmV0IGltcG9ydGFudCBzdXIgbGEgc3RydWN0dXJlIGRlcyBvYnNlcnZhdGlvbnMgcHVpc3F1J2VsbGUgbXVsdGlwbGllcmEgbGUgbm9tYnJlIGRlIGxpZ25lcyBwYXIgY2FzIChjZSBxdWkgbsOpY2Vzc2l0ZXJhIGRlIHBhc3NlciDDoCBsYSB2dWUgcGFyIGBlbnRyw6llc2ApLg0KDQojIyBFeGVyY2ljZQ0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KVHJhbnNmb3JtZXIgbGEgdmFyaWFibGUgKkxpZ25lKg0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KKipVbmlmb3JtaXNlciBsZSBub20gZGVzIGxpZ25lczoqKiAgDQoNCi0gQ3LDqWVyIHVuZSBmYWNldHRlIHN1ciBsYSBjb2xvbm5lIExpZ25lLiANCg0KLSBEZXV4IHByb2Jsw6htZXMgc2UgcG9zZW50OiAxKSBsZXMgbm9tcyBkZSBsaWduZXMgbm9uIHVuaWZvcm1lcyBldCAyKSBsZXMgdmFsZXVycyBtdWx0aXBsZXMuICANCg0KLSBOb3VzIGNob2lzaXNzb25zIGQndW5pZm9ybWlzZXIgbGVzIHZhbGV1cnMgZW4gdXRpbGlzYW50IGxlcyBudW3DqXJvcyBkZSBsaWduZXMgZXQgZW4gc3VwcHJpbWFudCBsZSBtb3QgTGlnbmUuICANCg0KLSBFeHBsb3JlciBldCBhY2NlcHRlciBsZXMgcmVncm91cGVtZW50cyBwcm9wb3PDqXMgYXZlYyBsYSBmb25jdGlvbiBgR3JvdXBlYC4gIA0KDQotIFN1cHByaW1lciBsZSBtb3QgbGlnbmU6ICANCg0KICAtIGDDiWRpdGVyIGxlcyBjZWxsdWxlcyAtPiByZW1wbGFjZXJgIC0+ICJMaWduZSIgcGFyOiBuZSByaWVuIHNhaXNpciBkYW5zIGwnZW5jYWRyw6kuICAgIA0KDQotIENsaXF1ZXIgZW5zdWl0ZSBkaXJlY3RlbWVudCBzdXIgYGVkaXRgIHN1ciB1bmUgY2VsbHVsZSBkZSBsYSBjb2xvbm5lIGRlICpMaWduZSogLT4gcmVtYXJxdWVyIGxhIHByw6lzZW5jZSBkJ3VuIGVzcGFjZSwgc3VwcHJpbWVyIGwnZXNwYWNlIGV0IGZlcm1lci4gDQoNCi0gUmFmcmFpY2hpciBsYSBmYWNldHRlIGV0IG9ic2VydmVyIGwnaW1wYWN0LiANCg0KLSBSZW1hcnF1ZXIgbCdpbXBhY3QgZGUgbCdlc3BhY2UgZGFucyBsYSBmYWNldHRlLiBDZXMgZXNwYWNlcyBwZXV2ZW50IMOqdHJlIHN1cHByaW3DqXMgZ3LDomNlIMOgIGxhIGZvbmN0aW9uOiBgw4lkaXRlciBsZXMgY2VsbHVsZXMgLT4gVHJhbnNmb3JtYXRpb25zIGNvdXJhbnRlcyAtPiBTdXBwcmltZXIgbGVzIGVzcGFjZXMgZGUgZMOpYnV0IGV0IGRlIGZpbmAuICAgDQotIFJlbXBsYWNlciBsZXMgY291bGV1cnMgZGUgbGlnbmUgcGFyIGxldXIgbnVtw6lybyBkaXJlY3RlbWVudCBkYW5zIGxhIGZhY2V0dGUuICAgDQo8L2Rpdj4NCg0KDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoqKkRpdmlzZXIgbGUgY29udGVudSBkZXMgY2VsbHVsZXMgZW4gY3LDqWFudCBkZXMgY29sb25uZXMgYXZlYyB1bmUgc2V1bGUgdmFsZXVyICAqKg0KDQotIERhbnMgbGEgZmFjZXR0ZSwgcmVtcGxhY2VyIGxlcyAiLSIgcGFyIGRlcyAiLCIuICAgIA0KDQotIGDDiWRpdGVyIGxhIGNvbG9ubmUgLT4gRGl2aXNlciBlbiBwbHVzaWV1cnMgY29sb25uZXNgOg0KICAtIETDqWZpbmlyIGxlIHPDqXBhcmF0ZXVyICIsIiAoY2VsdWktY2kgZGlzcGFyYWl0cmEpLiAgDQogIC0gRMOpY29jaGVyIGxlcyBvcHRpb25zICJEZXZpbmVyIiBldCAiU3VwcHJpbWVyIi4gIA0KLSBMZXMgbm91dmVsbGVzIGNvbG9ubmVzIHJlcHJlbmRyb250IGxlIG5vbSBkZSBsJ29yaWdpbmFsIG51bcOpcm90w6kuIExlcyByZW5vbW1lcjogcHJlbWllcmUsIGRldXhpZW1lLCB0cm9pc2llbWUsIHF1YXRyaWVtZS4gIA0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQpEaXZpc2VyIHBhciBsZXMgbG9uZ3VldXJzIGRlIGNoYW1wcyBsYSBjb2xvbm5lIGBOdW3DqXJvIGQnaW5jaWRlbnRgIHBvdXIgZW4gY3LDqWVyIGRldXggbm91dmVsbGVzOiAgDQogIDEuIFVuZSBjb2xvbm5lIGNvbnRlbmFudCBsZSBwcmVtaWVyIGNhcmFjdMOocmUgaW5kaXF1YW50IGxlIHR5cGUgZCdpbmNpZGVudCwgc29pdCBUICh0cmFpbikgb3UgUyAoc2VydmljZSkuICANCiAgMi4gVW5lIGNvbG9ubmUgY29udGVuYW50IGwnZW5zZW1ibGUgZGVzIGNhcmFjdMOocmVzIG51bcOpcmlxdWVzIGluZGlxdWFudCBsZSBudW3DqXJvIGQnaW5jaWRlbnQuICANCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCioqVsOpcmlmaWNhdGlvbnMgcHLDqWFsYWJsZXM6KioNCiAgMS4gVsOpcmlmaWVyIHF1J2lsIG4neSBhIHBhcyBkZSBkb3VibG9uIGRhbnMgY2V0dGUgY29sb25uZTogYEZhY2V0dGVzIHBlcnNvbm5hbGlzw6llcyAtPiBGYWNldHRlIGRvdWJsb25gIC0+IFF1ZWwgZXN0IGxlIHByb2Jsw6htZT8gIENsaXF1ZXIgc3VyIGBDaGFuZ2VyYCBldCBhbmFseXNlciBsJ2V4cHJlc3Npb24uICANCiAgMi4gVsOpcmlmaWVyIGxhIGxvbmd1ZXVyIGRlIGNoYXF1ZSBjYXM6ICBgRmFjZXR0ZXMgcGVyc29ubmFsaXPDqWVzIC0+IEZhY2V0dGUgbG9uZ3VldXIgZHUgdGV4dGVgLiAgICANCg0KKipEaXZpc2VyIGxhIGNvbG9ubmU6KiogIA0KLSBgw4lkaXRlciBsYSBjb2xvbm5lIC0+IERpdmlzZXIgZW4gcGx1c2lldXJzIGNvbG9ubmVzIHNlbG9uIGxlcyBsb25ndWV1cnMgZGUgY2hhbXBzYCA6IDEsIDguICAgIA0KLSBEw6ljb2NoZXIgOiBkZXZpbmVyIGxlIHR5cGUgZGUgY2VsbHVsZSBldCBTdXBwcmltZXIgY2V0dGUgY29sb25uZS4gICAgDQotIFJlbm9tbWVyIGxlcyBjb2xvbm5lcyA6IFR5cGUgZXQgSUQuICAgIA0KPC9kaXY+DQoNCjwvYnI+DQoNCioqKg0KDQo8L2JyPg0KDQojIyMgUmVjaGVyY2hlci9yZW1wbGFjZXIgdW4gY2FyYWN0w6hyZSBkYW5zIHRvdXRlcyBsZXMgY29sb25uZXMgYXZlYyBHUkVMDQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQpSZW1wbGFjZXIgbGVzIHZhbGV1cnMgIiMiIGRhbnMgdG91dGUgbGEgYmFzZSBkZSBkb25uw6llcyBwYXIgImF1Y3VuIioqICAgDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIFF1ZWwgcHJvYmzDqG1lIGNlIHJlbXBsYWNlbWVudCBwZXV0LWlsIHByb3ZvcXVlcj8gICAgDQotIEV4cGxvcmVyIGwnaW1wYWN0IGRlcyB0cm9pcyBleHByZXNzaW9ucyBkZSByZW1wbGFjZW1lbnQgc3VpdmFudGVzOiAgDQoNCjEuIGB2YWx1ZS5yZXBsYWNlKCIjIiwgImF1Y3VuIilgICAgDQoocmVtcGxhY2UgbGUgY2FyYWN0w6hyZSAjOiBhdWN1biBldCBhdWN1bk4vRCApICAgICANCiANCjIuIGBpZih2YWx1ZS5jb250YWlucygiIyIpLCJhdWN1biIsIHZhbHVlKWAgICANCihyZW1wbGFjZSBsZXMgY2VsbHVsZXMgZGVzICMgZXQgI05EIHBhciBhdWN1bikgIA0KDQozLiBgaWYodmFsdWU9PSgiIyIpLCJhdWN1biIsIHZhbHVlKWAgICAgIA0KKHJlbXBsYWNlIHNldWxlbWVudCBsZXMgY2VsbHVsZXMgIywgcGFzIGxlcyAjTkQgcGFyIGF1Y3VuKSANCjwvZGl2Pg0KDQo8L2JyPg0KDQoqKioNCg0KPC9icj4NCg0KIyMgMTAuMy4gRnVzaW9ubmVyIGxlIGNvbnRlbnUgZGUgcGx1c2lldXJzIGNvbG9ubmVzDQoNCiMjIyBEw6lmaXQgICANCk5vdXMgc291aGFpdG9ucyBjYWxjdWxlciBsYSBkdXLDqWUgZGVzIGluY2lkZW50cy4gUG91ciBjZSBmYWlyZSBub3VzIGNyw6llcm9ucyBkZXV4IGNvbG9ubmVzOiAgDQotIFVuZSBjb2xvbm5lIGZ1c2lvbm5hbnQgbGVzIGNvbG9ubmVzOiAqQW5uw6llIGNpdmlsZSosICpNb2lzIGNhbGVuZHJpZXIqLCAqam91cnMgZHUgbW9pcyogZXQgKkhldXJlIGRlIGwnaW5jaWRlbnQqLiAgDQotIFVuZSBjb2xvbm5lIGZ1c2lvbm5hbnQgbGVzIGNvbG9ubmVzOiAqQW5uw6llIGNpdmlsZSosICpNb2lzIGNhbGVuZHJpZXIqLCAqam91cnMgZHUgbW9pcyogZXQgKkhldXJlIGRlIGwnaW5jaWRlbnQqLiAgDQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAibm90ZSI+DQpMb3JzcXVlIGwnb24gZnVzaW9ubmUgZGVzIGNvbG9ubmVzLCBpbCBmYXV0IHBvcnRlciB1bmUgYXR0ZW50aW9uIHBhcnRpY3VsacOocmUgYXUgc8OpcGFyYXRldXIgY2hvaXNpLiBOZSBwYXMgdXRpbGlzZXIgdW4gY2FyYWN0w6hyZSBxdWkgcG91cnJhaXQgZmFpcmUgcGFydGllIGR1IGNvbnRlbnUgKGV4OiAsKSBvdSBxdWkgc2VydmlyYSDDoCBkaXZpc2VyIGxlcyBjb2xvbm5lcyAoLmNzdikNCjwvZGl2Pg0KDQo8L2JyPg0KDQojIyBFeGVyY2ljZQ0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KMS4gKipGb25jdGlvbiBhdXRvbWF0aXPDqWUqKiAtPiBGdXNpb25uZXIgbGVzIGNvbG9ubmVzOiAqQW5uw6llIGNpdmlsZSosICpNb2lzIGNhbGVuZHJpZXIqLCAqam91cnMgZHUgbW9pcyogZXQgKkhldXJlIGRlIGwnaW5jaWRlbnQqDQo8L2Rpdj4NCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCi0gQW5uw6llIGNpdmlsZSAtPiBgw4lkaXRlciBsYSBjb2xvbm5lYCAtPiBgSm9pbmRyZSBsZXMgY29sb25uZXNgLiAgICANCi0gSm9pbmRyZSBkZXMgY29sb25uZXMgLT4gQ29jaGVyIGxlcyBjb2xvbm5lcyB2b3VsdWVzLiAgDQotIFPDqXBhcmF0ZXVyIGVudHJlIGxlIGNvbnRlbnUgZGUgY2hhcXVlIGNvbG9ubmU6ICItIi4gICAgDQotIMOJY3JpcmUgbGUgcsOpc3VsdGF0IGRhbnMgdW5lIG5vdXZlbGxlIGNvbG9ubmUgbm9tbcOpZTogKkRhdGUqLiAgICANCg0KLSBUcmFuc2Zvcm1lciBlbiBmb3JtYXQgZGF0ZTogYMOJZGl0ZXIgbGVzIGNlbGx1bGVzIC0+IFRyYW5zZm9ybWF0aW9ucyBjb3VyYW50ZXMgLT4gRW4gZGF0ZWAuICAgIA0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQoyLiAqKkZlbsOqdHJlIEdSRUwqKiAtPiBGdXNpb25uZXIgbGVzIGNvbG9ubmVzOiAqQW5uw6llIGNpdmlsZSosICpNb2lzIGNhbGVuZHJpZXIqLCAqam91cnMgZHUgbW9pcyogZXQgKkhldXJlIGRlIHJlcHJpc2UqDQo8L2Rpdj4NCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCi0gQW5uw6llIGNpdmlsZSAtPiDDiWRpdGVyIGxhIGNvbG9ubmUgLT4gQWpvdXRlciB1bmUgY29sb25uZSBlbiBmb25jdGlvbiBkZSBjZXR0ZSBjb2xvbm5lOiAgDQoNCmBjZWxsc1siQW5uw6llIGNpdmlsZSJdLnZhbHVlICsgIi0iICsgIjAiICsgY2VsbHNbIk1vaXMgY2FsZW5kcmllciJdLnZhbHVlICsgIi0iICsgIjAiICsgY2VsbHNbIkpvdXIgZHUgbW9pcyJdLnZhbHVlICsgIiAiICsgIGNlbGxzWyJIZXVyZSBkZSBsJ2luY2lkZW50Il0udmFsdWVgLiAgDQoNCi0gVsOpcmlmaWVyIGxhIHRyYW5zZm9ybWF0aW9uIGF2ZWMgdW5lIGZhY2V0dGUgYHZhbHVlLnR5cGUoKWAuICANCg0KLSBSZWNvbW1lbmNlciBsYSBqb2ludHVyZSBwb3VyIGNyw6llciB1bmUgY29sb25uZSBhdmVjIGxhIGRhdGUtaGV1cmUgZGUgZmluIGRlIGwnaW5jaWRlbnQNCmBjZWxsc1siQW5uw6llIGNpdmlsZSJdLnZhbHVlICsgIi0iICsgIjAiICsgY2VsbHNbIk1vaXMgY2FsZW5kcmllciJdLnZhbHVlICsgIi0iICsgIjAiICsgY2VsbHNbIkpvdXIgZHUgbW9pcyJdLnZhbHVlICsgIiAiICsgIGNlbGxzWyJIZXVyZSBkZSBsJ2luY2lkZW50Il0udmFsdWVgLiAgDQoNCi0gVHJhbnNmb3JtZXIgZW4gZm9ybWF0IGRhdGU6IGDDiWRpdGVyIGxlcyBjZWxsdWxlcyAtPiBUcmFuc2Zvcm1hdGlvbnMgY291cmFudGVzIC0+IEVuIGRhdGVgLiAgDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCkNhbGN1bGVyIGxhIGR1csOpZSBkZSBsJ2luY2lkZW50ICANCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCg0KLSBDcsOpZXIgdW5lIG5vdXZlbGxlIGNvbG9ubmUgdmlkZTogIA0KYEVkaXQgQ29sdW1uID4gQWRkIENvbHVtbiBCYXNlZCBvbiBUaGlzIENvbHVtbiBgIC0+IENob2lzaXIgdW4gbm91dmVhdSBub20gZXQgbGUgY29udGVudTogIiIuICANCg0KLSBQb3VyIGNhbGN1bGVyIHVuZSBkaWZmw6lyZW5jZSBlbnRyZSBkYXRlOiBgZGlmZihkYXRlMSwgZGF0ZTIsICJyZXN1bHRzIGZvcm1hdCIpYC4gICAgDQoNCmBkaWZmKGNlbGxzWydkYXRlMiddLnZhbHVlLGNlbGxzWydkYXRlMSddLnZhbHVlLCAnbWludXRlcycpYC4gICANCjwvZGl2Pg0KDQo8L2JyPg0KDQoqKioNCg0KDQo8L2JyPg0KDQojIDExLiBMZXMgZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzIHsjZXhwcmVzc2lvbn0NCg0KPC9icj4NCg0KLSBMJ3VzYWdlIGRlIEdSRUwgcGVybWV0IGRlcyBtYW5pcHVsYXRpb25zIGRlIGRvbm7DqWVzIGJlYXVjb3VwIHBsdXMgYXZhbmPDqWVzIHF1ZSBsJ3V0aWxpc2F0aW9uIGRlcyBmb25jdGlvbnMgYXV0b21hdGlzw6llcywgbWFpcyBPcGVuUmVmaW5lIHBlcm1ldCBlbiBwbHVzIGRlIGNvbWJpbmVyIGwndXRpbGlzYXRpb24gZGVzIGV4cHJlc3Npb25zIHLDqWd1bGnDqHJlcyBhdmVjIEdSRUwgcG91ciBlbiBhdWdtZW50ZXIgbGEgcHVpc3NhbmNlLiANCi0gTGVzIGV4cHJlc3Npb25zIHLDqWd1bGnDqHJlcyBwZXJtZXR0ZW50LCDDoCBwYXJ0aXIgZCd1bmUgc3ludGF4ZSBzcMOpY2lmaXF1ZSwgZCdpZGVudGlmaWVyIGRlcyBwYXR0ZXJucyBkYW5zIHVuIGNvbnRlbnUuICANCi0gTG9yc3F1J3V0aWxpc8OpZXMgYXZlYyBHUkVMLCBjZXMgZXhwcmVzc2lvbnMgcGVybWV0dGVudCBkb25jIGQnaWRlbnRpZmllciBldCBkJ2V4dHJhaXJlIGRlcyBjb250ZW51cyB0csOocyBwcsOpY2lzIHBvdXIgZW5zdWl0ZSBsZXMgbWFuaXB1bGVyIHNlbG9uIGxlcyBiZXNvaW5zLiAgDQotIEVsbGVzIHBldXZlbnQgw6p0cmUgdXRpbGlzw6llcyDDoCBkaWZmw6lyZW50cyBlbmRyb2l0cyBkYW5zIE9wZW5SZWZpbmUgZXQgZG9pdmVudCB0b3Vqb3VycyDDqnRyZSBlbnRvdXLDqWVzIGRlIGAvIC9gOiBmaWx0cmVzLCBmYWNldHRlcywgZmVuw6p0cmUgR1JFTC4NCi0gQ2VydGFpbmVzIGV4cHJlc3Npb25zIHBldXZlbnQgcyfDqWNyaXJlIGVuIEdSRUwgYXZlYyBvdSBzYW5zIHJlZ2V4LiAgDQoNCjwvYnI+DQoNCiFbXShpbWFnZXMvT1IzMy5qcGcpDQoNCg0KLSBNYWlzIGNlcnRhaW5lcyBmb25jdGlvbnMgKGNvbW1lIGBtYXRjaGApIG4nYWNjZXB0ZW50IHF1ZSBjZXMgZXhwcmVzc2lvbnMuICANCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAibm90ZSI+DQoNCkxlcyBleHByZXNzaW9ucyByw6lndWxpw6hyZXMgcGV1dmVudCDDqnRyZSB1dGlsaXPDqWVzIGF2ZWMgcGx1c2lldXJzIGF1dHJlcyBsYW5nYWdlcyBkb250IFtSXShodHRwczovL3Rvd2FyZHNkYXRhc2NpZW5jZS5jb20vYS1nZW50bGUtaW50cm9kdWN0aW9uLXRvLXJlZ3VsYXItZXhwcmVzc2lvbnMtd2l0aC1yLWRmNWU4OTdjYTQzMikgZXQgW1B5dGhvbl0oaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9ob3d0by9yZWdleC5odG1sKSBldCBkYW5zIGRlcyBsb2dpY2llbHMgcXVpIG4nb250IHJpZW4gw6Agdm9pciBhdmVjIGxlcyBzdGF0aXN0aXF1ZXMgY29tbWUgW09wZW5PZmZpY2VdKGh0dHBzOi8vd2lraS5vcGVub2ZmaWNlLm9yZy93aWtpL0RvY3VtZW50YXRpb24vSG93X1Rvcy9SZWd1bGFyX0V4cHJlc3Npb25zX2luX1dyaXRlcikuDQoNClBvdXIgZW4gc2F2b2lyIHBsdXM6ICANCi0gaHR0cHM6Ly9naXRodWIuY29tL09wZW5SZWZpbmUvT3BlblJlZmluZS93aWtpL1VuZGVyc3RhbmRpbmctUmVndWxhci1FeHByZXNzaW9ucyAgDQotIGh0dHBzOi8vcmVnZXgxMDEuY29tLyAgDQoNCjwvZGl2Pg0KDQo8L2JyPg0KDQoqKioNCg0KDQpMYSBzeW50YXhlIGVzdCBjb21wb3PDqWUgZCfDqWzDqW1lbnRzIHBlcm1ldHRhbnQgZGUgIGNpYmxlciBkZXMgY2FyYWN0w6hyZXMgcHLDqWNpcyBldCBkZSBkw6lmaW5pciBsZXVyIGVtcGxhY2VtZW50IGV0IGxldXIgb2NjdXJyZW5jZS4NCg0KIyMjIyBMYSBzeW50YXhlIGRlIGJhc2U6IA0KDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IFRZUEVTIERFIENBUkFDVMOIUkVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFVQU5USUZJQ0FURVVSUyBFVCBFTVBMQUNFTUVOVCAgICAgICAgICAgICAgICAgfCANCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsNCnwgYC5gIDogTuKAmWltcG9ydGUgcXVvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGArYCA6IDEgb3UgcGx1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgXHdgIDogbidpbXBvcnRlIHF1ZWwgbW90LCBjaGlmZnJlIG91IF8gICAgKGBcV2AgOiBzYXVmKSAgICAgICAgICAgICAgICAgICAgICAgfCBgKmAgOiAwIG91IHBsdXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgXGRgIDogQ2hpZmZyZXMgICAgICAoYFxEYCA6IHNhdWYpICAgICAgICAgICAgICAgICAgICB8IGA/YCA6IDAgb3UgdW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICANCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYFxzYCA6IEVzcGFjZXMgICAgICAgICAoYFxTYCA6IHNhdWYpICAgICAgICAgICAgICAgICAgfCBgezJ9YCA6IE5vbWJyZSBleGFjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYFtBLVpdYCA6IE1hanVzY3VsZXMgICAgIChgW15BLVpdYCA6IHNhdWYpICAgICAgICAgICAgfCBgeyw0fWAgOiBFbnRyZSAwIGV0IDQgaW5jbC4gICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICANCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGBbYS16XWAgOiBNaW51c2N1bGVzICAgICAgKGBbXmEtel1gIDogc2F1ZikgICAgICAgICAgIHwgYHs0LH1gIDogNCBvdSBwbHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCANCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGBbYWJkO11gIDogbGVzIGxldHRyZXMgYSwgYiwgYywgZCBldCBsZSA7ICAgICAgICAgICAgIHwgYHsxOzN9YCA6IDEgT1UgMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYGFiY2RgIDogdW5lIG91IHBsdXNpZXVycyBsZXR0cmVzIGV4YWN0ZXMgICAgICAgICAgICAgfCBgezEsM31gIDogRW50cmUgMSBldCAzIGluY2wuICAgICAgICAgICAgICAgICAgICAgfCANCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgfGAgOiBPdSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgXmAgOiBEw6lidXQgZCd1bmUgbGlnbmUgICAgICAgICAgICAgICAgfCANCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgKClgIDogR3JvdXBlciB1biBjb250ZW51IGV0IGxlIGdhcmRlciBlbiBtw6ltb2lyZSAgICAgIHwgYCRgIDogRmluIGQndW5lIGxpZ25lIG91IHJhcHBlbGVyIHVuIGdyb3VwZSAgICB8DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgIGBcYCA6IENoZXJjaGVyIHVuIGNhcmFjdMOocmUgc3DDqWNpYWwgbGl0dMOpcmFsZW1lbnQgICAgfCBTYW5zIHF1YW50aWZpY2F0ZXVyLCBsJ29jY3VycmVuY2UgZXN0IGRlIDEgICAgICAgfA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQoNCiMjIyMjIFBhciBleGVtcGxlLCBqZSBjaGVyY2hlIHVuIGNvbnRlbnUgY29ycmVzcG9uZGFudCBhdSBtb3RpZjogIA0KDQpgXlxkezR9ICtbQS1aXVwuYCAgICANCiAgIA0KLSBkw6lidXRlIHBhciA0IGNoaWZmcmVzICAgDQotIHN1aXZpIGQndW4gZXNwYWNlIG91IHBsdXMgICANCi0gc3VpdmkgZCd1bmUgbGV0dHJlIG1hanVzY3VsZSBhdmVjIHVuIHBvaW50ICAgDQoNCg0KIyMjIyMgQXV0cmVzIGV4ZW1wbGVzIGF2ZWMgbGEgc3ludGF4ZSBPcGVuUmVmaW5lOg0KDQotIGB2YWx1ZS5maW5kKC9bQ2NdYXJvbGluZS8pYDogQ2Fyb2xpbmUgZXQgY2Fyb2xpbmUNCg0KLSBgdmFsdWUuZmluZCgvY2Ercm9saW5lLylgOiBjYXJvbGluZSBldCBjYWFhYXJvbGluZQ0KDQotIGB2YWx1ZS5maW5kKC9jYSpyb2xpbmUvKWA6IGNhcm9saW5lLCBjYWFhcm9saW5lIGV0IGNyb2xpbmUNCg0KLSBgdmFsdWUuZmluZCgvY2E/cm9saW5lLylgOiBjYXJvbGluZSBldCBjcm9saW5lIG1haXMgcGFzIGNhYWFyb2xpbmUNCg0KLSBgdmFsdWUuZmluZCgvY2F7NH1yb2xpbmUvKWA6IGNhYWFhcm9saW5lDQoNCi0gYHZhbHVlLmZpbmQoL15DYXJvbFxiLylgOiBDYXJvbCBlbiBkw6lidXQgZCdleHByZXNzaW9uLCBtYWlzIHBhcyBDYXJvbGluZSAoXGIgPSAiYm91bmRhcnkiKQ0KDQotIGB2YWx1ZS5maW5kKC9jW2Etel17Nn1lLylgOiBjICsgNiBtaW51c2N1bGVzICsgZQ0KDQotIGB2YWx1ZS5maW5kKC9DW2EtekEtWjAtOV17Nn1lLylgOiBDICsgNiBtaW51c2N1bGVzLCBtYWp1c2N1bGVzIG91IGNoaWZmcmVzICsgZQ0KDQotIGB2YWx1ZS5maW5kKC9DXHd7Nn1lLylgOiBDICsgW0EtWmEtejAtOV9dICsgZQ0KDQotIGB2YWx1ZS5maW5kKC9DLns2fWUvKWA6IEMgKyA2IG4naW1wb3J0ZSBxdW9pICsgZQ0KDQoNCioqKg0KDQoNCiMjIyBFeGVyY2ljZTogTWFuaXB1bGVyIGxlcyDDqWzDqW1lbnRzIGRlIHLDqWbDqXJlbmNlcyBiaWJsaW9ncmFwaGlxdWVzDQoNCiFbXShpbWFnZXMvT1IzNi5qcGcpDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoxLiBBbGxlciBzdXIgbGUgW2d1aWRlIEFQQV0oaHR0cHM6Ly9iaWIudW1vbnRyZWFsLmNhL2NpdGVyL3N0eWxlcy1iaWJsaW9ncmFwaGlxdWVzL2FwYT90YWI9MzI4MSkuICAgICANCjIuIENvcGllciBsZXMgZGV1eCByw6lmw6lyZW5jZXMgZGUgTGVtYWlyZSBldCBMZWJvdmljaSBhdSBwb2ludCAyLjEuICAgICAgDQozLiBEYW5zIE9wZW5SZWZpbmUsIGNsaXF1ZXIgc3VyIGxlIHBldGl0IGxvZ28gZW4gaGF1dCDDoCBnYXVjaGUgLT4gYENyw6llciB1biBwcm9qZXRgIC0+IGBQcmVzc2UtcGFwaWVyYDogQ29sbGVyIGxlcyBkZXV4IHLDqWbDqXJlbmNlcyBlbiAgYWpvdXRhbnQgdW4gc8OpcGFyYXRldXIgKioiOyIqKiDDoCBsYSBmaW4gZGUgbGEgcHJlbWnDqHJlIC0+IFN1aXZhbnQuICAgICAgIA0KDQo0LiBNb2RpZmllciBsZXMgb3B0aW9uczogDQogIC0gTGVzIGNvbG9ubmVzIHNvbnQgc8OpcGFyw6llcyBwYXIgLSBwZXJzb25uYWxpc8OpICI7Ii4gIA0KICAtIETDqWNvY2hlciAiQW5hbHlzZXIgbGEgb3UgbGVzCTEgbGlnbmUocykgc3VpdmFudGUocykgY29tbWUgZGVzIGVudMOqdGVzIGRlIGNvbG9ubmVzIi4gIA0KNS4gQ3LDqWVyIHByb2pldC4gICANCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KNi4gYMOJZGl0ZXIgbGEgY29sb25uZSAtPiBBam91dGVyIHVuZSBjb2xvbm5lIGVuIGZvbmN0aW9uIGRlIGNldHRlIGNvbG9ubmVgICANCg0KNy4gRXhhbWluZXIgbCdpbXBhY3QgZGUgY2VzIGRldXggY29tbWFuZGVzICoqR1JFTCArIHJlZ2V4KiouIFF1J2VzdC1jZSBxdWkgc2UgcGFzc2U/DQoNCjwvYnI+DQoqKsOJZGl0ZXIgbGVzIGNlbGx1bGVzIC0+IFRyYW5zZm9ybWVyOiAqKg0KDQo+IGB2YWx1ZS5maW5kKC9cKC4qP1wpLylgICANCg0KPiBgdmFsdWUuZmluZCgvXCguKj9cKS8pLmpvaW4oJywnKS5yZXBsYWNlKCIoIiwiICIpLnJlcGxhY2UoIikiLCAiIilgICANCg0KPC9icj4NCg0KICAtIENyw6llciBsYSBjb2xvbm5lIEF1dGV1ciA6IGB2YWx1ZS5wYXJ0aXRpb24oIigiKVswXWAgb3UgYHZhbHVlLnNwbGl0KCIoIilbMF1gICAgDQogIC0gQ3LDqWVyIGxhIGNvbG9ubmUgQW5uw6llOiBgdmFsdWUucGFydGl0aW9uKCIoIilbMl0ucGFydGl0aW9uKCIpIilbMF1gICAgb3UgYXZlYyByZWdleDogYHZhbHVlLm1hdGNoKC8uKj8oXGR7NH0pLio/LylbMF1gLiAgICANCiAgLSBDcsOpZXIgbGEgY29sb25uZSB0aXRyZTogYHZhbHVlLnBhcnRpdGlvbigiKS4iKVsyXS5wYXJ0aXRpb24oIigiKVswXWAuICAgICAgDQogIC0gQ3LDqWVyIGxhIGNvbG9ubmUgw6lkaXRldXI6IGB2YWx1ZS5wYXJ0aXRpb24oIikuIilbMl0ucGFydGl0aW9uKCIpLiIpWzJdYC4gICAgIA0KICAtIENyw6llciBsYSBjb2xvbm5lIMOpZGl0aW9uOiBgdmFsdWUucGFydGl0aW9uKCIpLiIpWzJdLnBhcnRpdGlvbigiKCIpWzJdLnBhcnRpdGlvbigiw6lkIilbMF1gIG91IGF2ZWMgcmVnZXg6IGB2YWx1ZS5tYXRjaCgvLiooXGQrKS4gw6lkLiovKVswXWAuICANCiAgLSBDcsOpZXIgbGEgY29sb25uZSB2b2x1bWU6IGB2YWx1ZS5wYXJ0aXRpb24oInZvbC4iKVsyXS5wYXJ0aXRpb24oIikiKVswXWAgb3UgYXZlYyByZWdleDogYHZhbHVlLm1hdGNoKC8uKnZvbC4gKFxkKykuKi8pWzBdYC4gIA0KQXZlYyByZWdleDogIA0KLSBTdXBwcmltZXIgbGVzIGxldHRyZXMgZHUgcHLDqW5vbTogYHZhbHVlLnJlcGxhY2UoLyhcc1tBLVpdLlxzKXwoXHNbQS1aXS4sXHMpLywgIiAiKWAuICANCi0gU3VwcHJpbWVyIHRvdXQgbGUgY29udGVudSBzYXVmIGxlcyBub21zIGRlIGZhbWlsbGU6IGB2YWx1ZS5yZXBsYWNlKC8oXHNbQS1aXS5ccyl8KFxzW0EtWl0uLFxzKXwoZXQpfCgsKS8sICIgIilgLiAgDQo8L2Rpdj4NCg0KPC9icj4NCg0KKioqDQoNCiMgMTIuIFRyYW5zcG9zaXRpb24NCg0KIyMgRXhlcmNpY2U6IHRyYW5zcG9zZXIgdW4gdGFibGVhdSBkJ2luZGljYXRldXJzIGR1IFdESQ0KPC9icj4NCg0KKipGaWNoaWVyIG9yaWdpbmFsIHTDqWzDqWNoYXJnw6kgZGUgbGEgW0JhbnF1ZSBtb25kaWFsZV0oaHR0cHM6Ly9kYXRhYmFuay5iYW5xdWVtb25kaWFsZS5vcmcvcmVwb3J0cy5hc3B4P3NvdXJjZT13b3JsZC1kZXZlbG9wbWVudC1pbmRpY2F0b3JzKSBlbiBmb3JtYXQgLmNzdiBjb21wb3PDqSBkZSA1IHBheXMgZXQgNCBpbmRpY2F0ZXVycyDDoCBsJ2hvcml6b250YWxlIGV0IDMgYW5uw6llcyDDoCBsYSB2ZXJ0aWNhbGUqKiAgDQoNCi0gUG91ciBvdXZyaXIgbGUgZmljaGllciDDoCBwYXJ0aXIgZGUgc29uIGVtcGxhY2VtZW50IHN1ciBHaXRodWI6IGh0dHBzOi8vZ2l0aHViLmNvbS9DUkxOUC9vcGVucmVmaW5lIA0KICAtIENsaXF1ZXIgc3VyIGxlIGZpY2hpZXIgKldESV9EYXRhX0V4dHJhY3QuY3N2KiAtPiBDbGlxdWVyIHN1ciBsZSBib3V0b24gUkFXIC0+IGNvcGllciBsJ2FkcmVzc2UgZHUgbmF2aWdhdGV1ci4NCiAgLSBEYW5zIE9wZW5SZWZpbmUsIENyw6llciB1biBwcm9qZXQgLT4gQWRyZXNzZXMgd2ViIChVUkxzKSAtPiBjb2xsZXIgbGUgbGllbi4NCiAgDQohW10oaW1hZ2VzL09SLXRyYW5zcG9zZTEuanBnKQ0KDQo8L2JyPg0KDQoqKjEuIFRyYW5zcG9zZXIgbGVzIGRhdGVzIMOgIGwnaG9yaXpvbnRhbGUgKGZvcm1hdCAqbG9uZyopKiogIA0KDQo8L2JyPg0KDQoqw4lkaXRlciBsZXMgY2VsbHVsZXMgLT4gVHJhbnNwb3NlciAtPiBUcmFuc3Bvc2VyIGxlcyBjZWxsdWxlcyBkZSBwbHVzaWV1cnMgY29sb25uZXMgZW4gbGlnbmVzLi4uKg0KDQoNCjwvYnI+DQoNCg0KIVtdKGltYWdlcy9PUi10cmFuc3Bvc2UyLmpwZykNCg0KPC9icj4NCg0KDQohW10oaW1hZ2VzL09SLXRyYW5zcG9zZTMuanBnKQ0KDQo8L2JyPg0KDQoqKjIuIFJlbXBsaXIgYXV0b21hdGlxdWVtZW50IGxlcyBjZWxsdWxlcyB2aWRlcyBkZXMgZGV1eCBjb2xvbm5lcyDDoCBsYSB2ZXJ0aWNhbGUqKg0KDQoqw4lkaXRlciBsZXMgY2VsbHVsZXMgLT4gUmVjb3BpZXIgbGVzIHZhbGV1cnMgZGFucyBsZXMgY2VsbHVsZXMgdmlkZXMgY29uc8OpY3V0aXZlcyoNCg0KPC9icj4NCg0KKiozLiBUcmFuc3Bvc2VyIGxlcyBpbmRpY2F0ZXVycyBlbiB2YXJpYWJsZXMgw6AgbGEgdmVydGljYWxlKioNCg0KKlRyYW5zcG9zZXIgLT4gQ29udmVydGlyIGVuIGxpc3RlIGxlcyBjb2xvbm5lcyBkZSBjbMOpL3ZhbGV1ci4uLioNCg0KPC9icj4NCg0KIVtdKGltYWdlcy9PUi10cmFuc3Bvc2U0LmpwZykNCg0KPC9icj4NCg0KIVtdKGltYWdlcy9PUi10cmFuc3Bvc2U1LmpwZykNCg0KPC9icj4NCg0KDQoqKioNCg0KIyAxMy4gRXhwb3J0ZXIgdW4gZmljaGllciBldCBmZXJtZXIgT3BlblJlZmluZQ0KDQotIEZvbmN0aW9uIMOgIHV0aWxpc2VyIGxvcnNxdWUgbCdvbiBlc3QgcHLDqnQgw6AgZXhwb3J0ZXIgc29uIGZpY2hpZXIgZW4gZGlmZsOpcmVudHMgZm9ybWF0cyBwb3VyIHRyYXZhaWxsZXIgZGFucyB1biBhdXRyZSBsb2dpY2llbCAoLmNzdiwgLnhscy4uLikNCi0gT1Igc2F1dmVnYXJkZSBhdXRvbWF0aXF1ZW1lbnQgbGVzIGZpY2hpZXJzIHNvdXMgZm9ybWUgZCdhcmNoaXZlcyBkZSBwcm9qZXQgZGFucyB1biBkb3NzaWVyIHN1ciBsZSBwb3N0ZSBkZSB0cmF2YWlsIGF1eHF1ZWxsZXMgb24gcGV1dCBhY2PDqWRlciBlbiBjbGlxdWFudCBzdXIgYE91dnJpciB1biBwcm9qZXRgIHN1ciBsYSBwYWdlIHByaW5jaXBhbGUuDQotIEwnb3V0aWwgYEV4cG9ydGV1ciB0YWJ1bGFpcmUgcGVyc29ubmFsaXPDqWAgZXN0IHRyw6hzIHV0aWxlIHBvdXIgcGFyYW3DqXRyZXIgbCdleHBvcnRhdGlvbiAoc8OpbGVjdGlvbiBkZSBjb2xvbm5lcywgZm9ybWF0IGRlIGRhdGVzLCBmb3JtYXQgZGUgZmljaGllci4uLikNCi0gRmVybWVyIGwnb25nbGV0IG5lIGZlcm1lIHBhcyBsZSBzZXJ2ZXVyIHF1aSBjb250aW51ZXJhIMOgIHJvdWxlciBlbiBhcnJpw6hyZS1wbGFuLg0KLSBBbGxlciDDoCBsYSBmZW7DqnRyZSBub2lyZSBkdSB0ZXJtaW5hbCBldCB1dGlsaXNlciBsZXMgdG91Y2hlcyBDVFJMICsgQyBqdXNxdSfDoCBjZSBxdSdlbGxlIHNlIGZlcm1lIGQnZWxsZS1tw6ptZSAoaWwgZXN0IHBhcmZvaXMgbsOpY2Vzc2FpcmUgZGUgcsOpcMOpdGVyIMOgIHBsdXMgZCd1bmUgcmVwcmlzZSkuIExlIGZpY2hpZXIgc2VyYSBlbnJlZ2lzdHLDqSB1bmUgZGVybmnDqHJlIGZvaXMgZXQgbGUgbG9naWNpZWwgc2VyYSAgbWFpbnRlbmFudCBiZWwgZXQgYmllbiBmZXJtw6kuDQoNCjwvYnI+DQoNCioqKg0KDQoNCiMgMTQuIFBvdXIgZmFpcmUgZHVyZXIgbGUgcGxhaXNpciENCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgRXh0cmFpcmUgc2V1bGVtZW50IGNlcnRhaW5zIGNhcmFjdMOocmVzIHNlbG9uIGxldXIgcG9zaXRpb24NCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCg0KRXh0cmFpcmUgc2V1bGVtZW50IGxlcyBjYXJhY3TDqHJlcyBkZSA1IMOgIDcgIA0KDQotIHZhbHVlWzUsIDddDQoNCkV4dHJhaXJlIGxlcyBjYXJhY3TDqHJlcyDDoCBwYXJ0aXIgZGUgNSAgDQoNCi0gdmFsdWUuc3Vic3RyaW5nKDUpDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgU2F2b2lyIHNpIHVuZSBjb25kaXRpb24gZXN0IHZyYWllIG91IGZhdXNzZT8NCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCkVzdC1jZSBxdWUgbGUgY29udGVudSBkZXMgdmFsZXVycyBjb3JyZXNwb25kIMOgICIyMDE5LTAxLTAxIiAgDQoNCi0gdmFsdWU9PSIyMDE5LTAxLTAxIg0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIENvbm5hw650cmUgbGEgbG9uZ3VldXIgZGVzIHZhbGV1cnMgZCd1bmUgY29sb25uZQ0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KLSB2YWx1ZS5sZW5ndGgoKQ0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIENvbXB0ZXIgbGUgbm9tYnJlIGRlIG1vdHMgZGFucyBkZXMgY2VsbHVsZXMgKHPDqXBhcsOpcyBwYXIgZGVzIGVzcGFjZXMpDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIHZhbHVlLnNwbGl0KCIgIikubGVuZ3RoKCkgb3UgdmFsdWUuc3BsaXQoL1xzLykubGVuZ3RoKCkNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBDYWxjdWwgZCd1biBwb3VyY2VudGFnZSBhcnJvbmRpIChleCBkJ3VuIHLDqXN1bHRhdCBzdXIgMTApDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIHJvdW5kKCh2YWx1ZSoxMDApIC8gMTApDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgVHJhbnNmb3JtZXIgdW4gZm9ybWF0IGRhdGUgZW4gZm9ybWF0IHRleHRlIHBsdXMgbGlzaWJsZQ0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KLSB2YWx1ZS50b1N0cmluZygiZGQgTU1NTSB5eXl5IikNCg0KPC9kaXY+DQoNCjwvYnI+DQoNCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgTGEgY3LDqWF0aW9uIGV0IG1hbmlwdWxhdGlvbiBkZSBsaXN0ZXMgKCphcnJheSopIC0gRGl2aXNlciBsZSBjb250ZW51IGRlIGNlbGx1bGVzIA0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KRGl2aXNlciBsZSBjb250ZW51IGRlIGNlbGx1bGVzIGVuIGZvbmN0aW9uIGQndW4gc8OpcGFyYXRldXIgcG91ciBuZSBjb25zZXJ2ZXIgcXVlIGxlIHByZW1pZXIgw6lsw6ltZW50ICAgIA0KDQotIHZhbHVlLnNwbGl0KCIgIilbMF0NCg0KRGl2aXNlciBsZSBjb250ZW51IGQndW5lIGNlbGx1bGUgcG91ciBsZSByw6lvcmRvbm5lciANCg0KLSB2YWx1ZS5zcGxpdCgiLCIpLnJldmVyc2UoKS5qb2luKCIsIikNCg0KLSB2YWx1ZS5zcGxpdCgiLCIpLnNvcnQoKS5qb2luKCIsIikNCg0KRGl2aXNlciBhcHLDqHMgbGVzIDMgcHJlbWllcnMgY2FyYWN0w6hyZXMgZXQgY29uc2VydmVyIGxlIHByZW1pZXIgw6lsw6ltZW50ICANCg0KLSB2YWx1ZS5zcGxpdEJ5TGVuZ3RocygzKVswXSANCg0KRGl2aXNlciBzZWxvbiBsZSB0eXBlIGRlIGNhcmFjdMOocmVzIGV0IHJldGVuaXIgbGUgZGV1eGnDqG1lIMOpbMOpbWVudCAgDQoNCi0gdmFsdWUuc3BsaXRCeUNoYXJUeXBlKClbMV0NCg0KRGl2aXNlciBsZSBjb250ZW51IGQndW5lIGNlbGx1bGUgc3VyIHVuIHRlcm1lIHggZXQgY29uc2VydmVyIGxlIGNvbnRlbnUgcHLDqWPDqWRlbnQgDQoNCi0gdmFsdWUucGFydGl0aW9uKCJ0ZXJtZSIpWzBdDQoNCi0gdmFsdWUucGFydGl0aW9uKCIgdG8gIilbMl0ucGFydGl0aW9uKCIgb24gIilbMF0NCmh0dHA6Ly93d3cuZGF2aWRodXluaC5uZXQvc3BhY2VzL25pY2FyMjAxMS90dXRvcmlhbC5wZGYNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBJbnZlcnNlciBsZSBjb250ZW51IGQndW5lIGNlbGx1bGUNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCkRpdmlzZXIgbGUgY29udGVudSBkJ3VuZSBjZWxsdWxlIGV0IGludmVyc2VyIGwnb3JkcmUgZGUgcHLDqXNlbnRhdGlvbiBlbiBham91dGFudCB1bmUgdmlyZ3VsZSBlbnRyZSBsZXMgZGV1eCAgDQoNCi0gdmFsdWUuc3BsaXQoJyAnKVsxXSArICIsIiArICIgIiArIHZhbHVlLnNwbGl0KCcgJylbMF0NCg0KT1UNCg0KLSB2YWx1ZS5tYXRjaCgvKC4qKSwoLiopLykucmV2ZXJzZSgpLmpvaW4oIiAiKQ0KPC9kaXY+DQoNCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgQWpvdXRlciB1biB6w6lybyBwb3VyIGF2b2lyIHVuIG5vbWJyZSBkZSBjYXJhY3TDqHJlcyBwcsOpY2lzDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQpBam91dGVyIHVuIHrDqXJvIGRldmFudCBsZSBjb250ZW51IHNpIGRvbm5lIHVuZSBjaGFpbmUgZGUgMCDDoCAyIGNhcmFjdMOocmVzICANCg0KLSAiMCJbMCwyLWxlbmd0aCh2YWx1ZSldICsgdmFsdWUNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBBcHBsaXF1ZXIgZGVzIGNvbmRpdGlvbnMNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCkZvbmN0aW9uIGlmIC0gbcOqbWUgY2hvc2UgcXVlIGRhbnMgZXhjZWwgIA0KDQotIGlmKHRlc3QsIHNpIHRlc3QgZXN0IHZyYWksIHNpIHRlc3QgZXN0IHZyYWkpDQoNClNpIGxhIGNlbGx1bGUgY29udGllbnQgeCwgw6ljcmlyZSB4LCBzaW5vbiB5DQoNCi0gaWYodmFsdWUuY29udGFpbnMoIngiKSwgIngiLCAieSIpDQogDQotIGlmKHZhbHVlLmNvbnRhaW5zKCIxIiksIHZhbHVlLCBudWxsKQ0KDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgQ29tcGFyZXIgZGV1eCBjb2xvbm5lcw0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KSWRlbnRpZmllciBzaSBsZSBjb250ZW51IGRlcyBjZWxsdWxlcyBkJ3VuZSBjb2xvbm5lIGVzdCBwYXJlaWwgw6AgdW5lIGF1dHJlICANCg0KLSB2YWx1ZSA9PSBjZWxsc1snYXV0cmUtY29sb25uZSddLnZhbHVlDQoNCkVzdC1jZSBxdWUgbGUgcHJlbWllciBjYXJhY3TDqHJlIGRlIGxhIGNvbG9ubmUgeCBlc3QgbGUgbcOqbWUgcXVlIGxhIGNvbG9ubmUgeSAgDQoNCi0gY2VsbHNbImNvbG9ubmUxIl0udmFsdWVbMF0gPT0gY2VsbHNbImNvbG9ubmUyIl0udmFsdWVbMF0NCg0KQ29tcGFyZXIgbGUgY29udGVudSBkZSBkZXV4IGNvbG9ubmVzIGV0IG1vZGlmaWVyIGxlcyB2YWxldXJzIHNlbG9uIGxlIHLDqXN1bHRhdCBkZSBsYSBjb25kaXRpb24gIA0KDQotIGlmKGNlbGxzWyJjb2xvbm5lMSJdLnZhbHVlID09IGNlbGxzWyJjb2xvbm5lMiJdLnZhbHVlLCAiUGFyZWlsIiwgIlBhcyBwYXJlaWwiKQ0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIFbDqXJpZmllciBsZSBmb3JtYXQgZCd1bmUgY29sb25uZQ0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KDQotIHZhbHVlLnR5cGUoKSAgDQoNCjwvZGl2Pg0KDQo8L2JyPg0KDQoNCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgRmFpcmUgZGVzIGNhbGN1bHMgc2ltcGxlcyAodmFsZXVycyBudW3DqXJpcXVlcykNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCg0KU29tbWUgZCd1bmUgY29sb25uZSBwbHVzIHVuZSBhdXRyZSAgDQoNCi0gdmFsdWUgKyBjZWxsc1snSm91ciBkdSBtb2lzJ10udmFsdWUNCg0KQXJyb25kaXIgbGUgY29udGVudSAgDQoNCi0gcm91bmQodmFsdWUpDQo8L2Rpdj4NCg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBSZXByZW5kcmUgZXQgY29uY2F0w6luZXIgbGUgY29udGVudSBkJ3VuZSBhdXRyZSBjb2xvbm5lDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQpDcsOpZXIgdW5lIG5vdXZlbGxlIGNvbG9ubmUgZW4gZnVzaW9ubmFudCBsZSBjb250ZW51IGRlIGRldXggYXV0cmVzIGV0IGFqb3V0ZXIgZHUgdGV4dGUgIA0KDQotIGNlbGxzWydub20nXS52YWx1ZSArIGNlbGxzWydub20nXS52YWx1ZSArICJCb25qb3VyISINCg0KQ3LDqWVyIHVuZSBub3V2ZWxsZSBjb2xvbm5lIGF2ZWMgbGVzIHRyb2lzIHByZW1pZXJzIGNhcmFjdMOocmVzIHNldWxlbWVudCAgDQoNCi0gY2VsbHNbJ1N5bXB0b21lJ10udmFsdWVbMCwzXQ0KDQotIFRyYW5zZm9ybWVyIGxlIGNvbnRlbnUgZCd1bmUgY29sb25uZSBlbiBjb25jYXTDqW5hbnQgbGUgY29udGVudSBkJ3VuZSBhdXRyZSAgDQoNCnZhbHVlICsgJyAnICsgY2VsbHNbJ3N0cmVldC10eXBlJ10udmFsdWUNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBSZW1wbGFjZXIgZGVzIGNhcmFjdMOocmVzDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNClJlbXBsYWNlciB0b3V0IGxlIGNvbnRlbnUgZCd1bmUgY29sb25uZSAoaWNpLCB2aWRlciBsYSBjb2xvbm5lKSAgDQoNCi0gdmFsdWUucmVwbGFjZSh2YWx1ZSwgIiIpDQoNClJlbXBsYWNlciB1bmUgbGV0dHJlIHBhciB1bmUgYXV0cmUgIA0KDQotIHZhbHVlLnJlcGxhY2VDaGFycygibyIsICJhIikNCg0KRmFpcmUgcGx1c2lldXJzIHJlbXBsYWNlbWVudHMgZCd1biBjb3VwICANCg0KLSB2YWx1ZS5yZXBsYWNlKCIxIiwgInVuIikucmVwbGFjZSgiMiIsICJkZXV4IikucmVwbGFjZSgiMyIsICJ0cm9pcyIpDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgSWRlbnRpZmllciBkZXMgY2VsbHVsZXMgcXVpIGNvbW1lbmNlbnQgcGFyLi4uIChyw6lzdWx0YXQgYm9vbMOpZW4pDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNCi0gdmFsdWUuc3RhcnRzV2l0aCgiQmVycmkiKSAgDQoNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBTdXBwcmltZXIgdW4gY2FyYWN0w6hyZSBkZSBkw6lidXQgb3UgZmluIGRlIHZhbGV1cjoNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCg0KKipTdXBwcmltZSDigJxT4oCdIGR1IGTDqWJ1dCBkZSBsYSBjZWxsdWxlICAqKg0KDQotIHZhbHVlLnJlcGxhY2UoL15TLywiIikgW3JlZ2V4IF4gaW5kaXF1ZSBsZSBkw6lidXQgZCd1bmUgY2VsbHVsZV0NCg0KKipTdXBwcmltZSAiLiIgw6AgbGEgZmluIGRlIGxhIGNlbGx1bGUgICoqDQoNCi0gdmFsdWUucmVwbGFjZSgvXC4kLywiIikgW3JlZ2V4ICQgaW5kaXF1ZSBsYSBmaW4gZCd1bmUgY2VsbHVsZV0NCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBUcmF2YWlsbGVyIGF2ZWMgdW4gZm9ybWF0IGRhdGUNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCkV4dHJhaXJlIHNldWxlbWVudCB1bmUgcGFydGllIGQndW5lIGRhdGUgIA0KDQotIHZhbHVlLnRvRGF0ZSgpLmRhdGVQYXJ0KCJ5ZWFyIikgIA0KDQotICBkaWZmKG5vdygpLHZhbHVlLCd3ZWVrcycpICANCg0KPC9kaXY+DQoNCg0KKioqDQoNCjwvYnI+DQoNCiMgMTUuIFJlc3NvdXJjZXMNCg0KLSBbU2l0ZSBldCBkb2N1bWVudGF0aW9uIG9mZmljaWVsc10oaHR0cHM6Ly9vcGVucmVmaW5lLm9yZy8pDQoNCi0gSm9obiBMaXR0bGUsIDIwMTgsIFtDbGVhbmluZyBEYXRhIHdpdGggT3BlblJlZmluZV0oaHR0cHM6Ly9saWJqb2huLmdpdGh1Yi5pby9vcGVucmVmaW5lL2luZGV4Lmh0bWwpICANCg0KLSBFdmFuIFdpbGwsIDIwMjEsIFtHZXQgU3RhcnRlZCB3aXRoIE9wZW5SZWZpbmU6IEV4cGxvcmUsIENsZWFuLCBhbmQgVHJhbnNmb3JtIHlvdXIgRGF0YSFdKGh0dHBzOi8vZXZhbndpbGwuZ2l0aHViLmlvL29wZW5yZWZpbmUtYi8pICANCg0KLSBVQ0xBLCAyMDE5LCBbR2V0dGluZyBzdGFydGVkIHdpdGggT3BlblJlZmluZSBEaWdpdGFsIEh1bWFuaXRpZXMgMjAxXShodHRwOi8vbWlyaWFtcG9zbmVyLmNvbS9jbGFzc2VzL2RoMjAxdzE5L3R1dG9yaWFscy1ndWlkZXMvZGF0YS1jbGVhbmluZy1hbmQtbWFuaXB1bGF0aW9uL2dldHRpbmctc3RhcnRlZC13aXRoLW9wZW5yZWZpbmUvKQ0KDQotIFtSZWZpbmVQcm8gS25vd2xlZGdlIEJhc2UgZm9yIE9wZW5SZWZpbmVdKGh0dHBzOi8va2IucmVmaW5lcHJvLmNvbS8pDQoNCi0gU2V0aCB2YW4gSG9vbGFuZCwgUnViZW4gVmVyYm9yZ2gsIGFuZCBNYXggRGUgV2lsZGUsIFtDbGVhbmluZyBEYXRhIHdpdGggT3BlblJlZmluZV0oaHR0cHM6Ly9wcm9ncmFtbWluZ2hpc3Rvcmlhbi5vcmcvZW4vbGVzc29ucy9jbGVhbmluZy1kYXRhLXdpdGgtb3BlbnJlZmluZSkNCg0KLSBbSW50cm9kdWN0aW9uIHRvIE9wZW5SZWZpbmVdKGh0dHBzOi8vZG9hbmEuZ2l0Ym9va3MuaW8vdGVzdC9jb250ZW50LykNCg0KLSBEYXRhIENhcnBlbnRyeSwgW0RhdGEgQ2xlYW5pbmcgd2l0aCBPcGVuUmVmaW5lIGZvciBFY29sb2dpc3RzXShodHRwczovL2RhdGFjYXJwZW50cnkub3JnL09wZW5SZWZpbmUtZWNvbG9neS1sZXNzb24vMDAtZ2V0dGluZy1zdGFydGVkL2luZGV4Lmh0bWwpDQoNCi0gT3dlbiBTdGVwaGVucywgMjAxNCwgW0ludHJvZHVjdGlvbiB0byBPcGVuUmVmaW5lXShodHRwOi8vd3d3Lm1lYW5ib3lmcmllbmQuY29tL292ZXJkdWVfaWRlYXMvd3AtY29udGVudC91cGxvYWRzLzIwMTQvMTEvSW50cm9kdWN0aW9uLXRvLU9wZW5SZWZpbmUtaGFuZG91dC1DQy1CWS5wZGYpDQoNCi0gVmVyYm9yZ2ggZXQgRGUgV2lsZGUsIDIwMTMsIFtVc2luZyBPcGVuUmVmaW5lXShodHRwczovL3d3dy5nYmlmLmVzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE4LzAxL1VzaW5nLU9wZW5SZWZpbmVCb29rLnBkZikNCg0KLSBbTGlicmFyeSBDYXJwZW50cnk6IE9wZW5SZWZpbmVdKGh0dHBzOi8vbGlicmFyeWNhcnBlbnRyeS5vcmcvbGMtb3Blbi1yZWZpbmUvMDEtaW50cm9kdWN0aW9uL2luZGV4Lmh0bWwpDQoNCi0gW0dyYXRlZnVsIERhdGFdKGh0dHBzOi8vZ2l0aHViLmNvbS9zY290dHl0aGVyZWQvZ3JhdGVmdWxkYXRhL3dpa2kpICANCg0KLSBbR1JFTCBSZWNpcGVzXShodHRwczovL2dpdGh1Yi5jb20vT3BlblJlZmluZS9PcGVuUmVmaW5lL3dpa2kvUmVjaXBlcykNCg0KLSBbQ2hlYXQgU2hlZXQ6IFJlZ3VsYXIgRXhwcmVzc2lvbnMgJiBHUkVMXShodHRwczovL2NvZGU0bGlidG9yb250by5naXRodWIuaW8vMjAxOC0xMC0xMi1hY2Nlc3MvR29vZ2xlUmVmaW5lQ2hlYXRTaGVldHMucGRmKQ0KDQotIFtFdGMhXShodHRwczovL2dpdGh1Yi5jb20vT3BlblJlZmluZS9PcGVuUmVmaW5lL3dpa2kvRXh0ZXJuYWwtUmVzb3VyY2VzKQ0KDQoNCjxzdHlsZT4NCi5yaWdodCB7DQogZmxvYXQ6IHJpZ2h0Ow0KfQ0KDQouY2VudGVyIHsNCiBhbGlnbjogY2VudGVyOw0KfQ0KDQoubm90ZSB7DQogIHBhZGRpbmc6IDAuNWVtOw0KICBib3JkZXItc3R5bGU6IHNvbGlkOw0KICBib3JkZXItY29sb3I6IGdyZWVuOw0KICBib3JkZXItd2lkdGg6IHRoaW47DQogIGZvbnQtc2l6ZTogOTAlOw0KICBib3JkZXItcmFkaXVzOiAxMHB4Ow0KfQ0KDQouYm94MSB7DQogIHBhZGRpbmc6IDAuNWVtOw0KICBiYWNrZ3JvdW5kOiAjZTBlYmViOw0KICBjb2xvcjogYmxhY2s7DQogIGJvcmRlci1yYWRpdXM6IDEwcHg7DQp9DQoNCi5ib3gyIHsNCiAgcGFkZGluZzogMC41ZW07DQogIGJhY2tncm91bmQ6ICM5MmI5Yjk7DQogIGNvbG9yOiB3aGl0ZTsNCiAgYm9yZGVyLXJhZGl1czogMTBweDsNCn0NCi5jZW50ZXIgew0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQoNCi50aXRsZSB7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgY29sb3I6ICMwMDMzNjY7DQp9DQoNCi5zdWJ0aXRsZSB7DQogIGNvbG9yOiAjMDAzMzY2Ow0KfQ0KDQpoMSwgaDIsIGgzLCBoNCwgaDUsIGg2LCBsZWdlbmQgew0KICBjb2xvcjogIzVBN0I5QzsNCn0NCg0KPC9zdHlsZT4=